Port 80 wird von SYSTEM (PID 4) verwendet. Was ist das?

9

Ich versuche, Port 80 für meinen Anwendungsserver zu verwenden, aber wenn ich "netstat -aon" ausführe, erhalte ich

TCP 0.0.0.0:80 0.0.0.0:0 HÖREN 4

Wenn ich den Prozess im Task-Manager nachschlage, wird angezeigt, dass PID 4 SYSTEM ist, das ist es, keine Erweiterung ... nichts, nur "SYSTEM". Was ist denn hier los?

Ich habe Angst, diesen Prozess zu beenden. Was mache ich?


quelle
net stop http ARBEITET FÜR MICH
Saurabh Sinha

Antworten:

14

Obwohl auf bestimmte Dienste hingewiesen wird (z. B. der "Web Deployment Agent-Dienst"), wird die Hauptursache dadurch nicht behoben. Wenn Sie nur Dienste deaktivieren, die das Problem auslösen, besteht die Möglichkeit, dass sie in Zukunft in einer geringfügig anderen Form wieder den Kopf erheben. Es lohnt sich also zu verstehen, was falsch läuft, denn das führt zu einer besseren Lösung.

Dieses Problem tritt auf, wenn ein Anwendungsserver die vollständige Kontrolle über Port 80 wünscht. Dies steht im Widerspruch zu einer Windows-Funktion, mit der mehrere Prozesse Anforderungen an Port 80 verarbeiten können. Es ist durchaus möglich, dass eine beliebige Anzahl von Prozessen HTTP-Anforderungen an Port empfängt 80, da Windows über einen integrierten HTTP-Versandmechanismus verfügt. Jeder Prozess kann Windows mitteilen, welche URLs verarbeitet werden sollen.

Wenn ein Anwendungsserver dies jedoch völlig ignoriert, befinden Sie sich wieder in der weniger flexiblen Socket-Welt der alten Schule, in der nur ein Prozess Anforderungen empfangen kann, die für einen bestimmten Port bestimmt sind.

Das mag in Ordnung sein - wenn Sie wirklich nichts anderes als einen bestimmten Prozess wollen, der HTTP-Anforderungen an Port 80 verarbeitet, wird es tolerierbar, einen Anwendungsserver zu verwenden, der die flexibleren Mechanismen von Windows nicht unterstützt. (Und einige beliebte App-Server haben diese Einschränkung. AFAIK, Tomcat ist beispielsweise nicht in der Lage, gut mit anderen zu spielen, und besteht darauf, Port 80 für sich allein zu haben. Wenn Sie also den App-Server eines anderen verwenden, ist dies möglicherweise unpraktisch passen Sie es an, um den bevorzugten Mechanismus zu verwenden.)

Windows versucht, solche unflexiblen Dienste zu berücksichtigen, indem es seinen Versandmechanismus nicht an Port 80 bindet, bis etwas aktiv danach fragt. (Aus diesem Grund wird anfangs nicht unbedingt ein Problem angezeigt, das jedoch nach einer Aktualisierung oder Konfigurationsänderung auftreten kann.) Aber sich darauf zu verlassen, ist keine sehr solide Lösung - Sie vertrauen im Wesentlichen auf das Glück, dass nichts versucht, unter Port 80 abzuhören, bevor Ihr App-Server gestartet wird. (Es gibt verschiedene Gründe, warum ein Prozess spekulativ versuchen könnte, sich für bestimmte URLs an Port 80 zu registrieren und sich zurückzuziehen, wenn dies nicht zulässig ist.)

Wenn Sie also möchten, dass ein Dienst exklusiven Zugriff auf Port 80 hat, sollten Sie dies Windows mitteilen. Es ist nicht gut genug, um zu versuchen, alle Dienste auszuschalten, die möglicherweise versuchen, den üblichen Mechanismus zur Portfreigabe zu verwenden, da es schwierig ist, sicher zu sein, dass Sie alle gefunden haben. (Insbesondere, wenn Windows-Updates die Standardeinstellungen zu ändern scheinen.) Es ist wahrscheinlich empfehlenswert, die Ihnen bekannten zu deaktivieren. Am besten gehen Sie jedoch von beiden Seiten vor: Deaktivieren Sie nicht gewünschte Dienste und stellen Sie sicher, dass dies nicht der Fall ist möglich für diejenigen, von denen du nicht wusstest, dass sie dich stolpern lassen.

Standardmäßig HTTP.SYS(der zugrunde liegende HTTP-Versandmechanismus für die Portfreigabe in Windows) kann alle Adressen abhören. Aber man kann es nicht sagen. Diese Seite zeigt einen Weg, dies zu tun: http://www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/

Dies ist eine relativ einfache Methode, da weiterhin IPh6 auf localhost abgehört werden kann. Es gibt nur den IPv4-Port 80 frei. Sie können ihn mit einer spezielleren Konfiguration weiterentwickeln. (Sie können sogar die Funktion HTTP.SYSvollständig deaktivieren , dies kann jedoch zu Problemen mit anderen Ports als 80 führen, sodass Probleme auftreten können.)

Was auch immer Sie tun, es geht darum sicherzustellen, dass HTTP.SYSnicht versucht wird, Port 80 an der IP-Adresse abzuhören, die Ihnen wichtig ist. Sobald Sie dies getan haben, müssen Sie sich weder um das Deaktivieren von Diensten noch um andere Änderungen kümmern, die das Problem erneut einführen. Wenn Sie sichergestellt haben, dass der von Ihnen benötigte Endpunkt für die Portfreigabe praktisch außerhalb der Grenzen liegt, sollten Sie feststellen, dass der Systemprozess nicht mehr an ihn gebunden ist.

Ian Griffiths
quelle
Vielen Dank für eine sehr informative Antwort. Als Unix-Benutzer wusste ich nicht, dass Windows über einen HTTP-Versandmechanismus verfügt, mit dem mehrere Prozesse gleichzeitig auf Anforderungen auf Port 80 reagieren können.
Anthony Geoghegan
11

Schuldig war der Web Deployment Agent Service.

Bessere Lösung als net stop httpdas Beenden der Dienste mit dem Namen "Web Deployment Agent Service".

Avinash
quelle
3
Mann! F *** schreckliche Microsoft-Praktiken! Ich musste stundenlang herausfinden, warum es eine IIS-Instanz gab (gemessen an den Headern bei der Verbindung über Telnet), die 0.0.0.0:80 abhörte und den Start von Apache verhinderte, AUCH als ich IIS aus Windows-Funktionen / -Rollen entfernt hatte. Ja, es war der Web Deployment Agent Service, der den Zugriff auf Port 80 unter einer beliebigen Adresse blockierte! Mann!
Francisco Zarabozo
2
Eher ein Fall eines App-Servers, der schlechte Praktiken verwendet. Windows verfügt über einen Mechanismus, mit dem mehrere Prozesse HTTP-Anforderungen an Port 80 verarbeiten können. IIS kann durchaus mit mehreren anderen Anwendungen koexistieren, die alle Port 80-Anforderungen verarbeiten. Aus diesem Grund lauscht der Systemprozess auf 80 für Sie - er kann jede Anforderung an den Prozess senden, der für die jeweilige URL verantwortlich ist. Wenn ein App-Server dies völlig ignoriert und den vollständigen Besitz von Port 80 wünscht, geht leider alles schief. Wenn der App-Server die Konvention nicht ignoriert, tritt dieses Problem nicht auf.
Ian Griffiths
1
Ok, ich habe gerade erfahren, dass Nginx "diese MS" -Konvention ignoriert ... und den Dienst einfach deaktiviert hat.
Jens A. Koch
4
Der spezifische Name des Dienstes, den Sie stoppen und deaktivieren müssen, lautet World Wide Web Publishing Service. Während "net stop http" selbst eine wirklich brutale Antwort voller böser Nebenwirkungen ist - Dienste wie Ihr Druckspooler und ein Teil des Windows 10-Anmeldevorgangs basieren auf http -, gibt es eine Liste von, wenn Sie es versuchen Dienste, die von http abhängen, und die Option zum Zurücksetzen. Als ich die kleine Handvoll Dienste in dieser Liste nacheinander ausprobierte, stellte ich fest, dass der WWW-Veröffentlichungsdienst der Schuldige war.
Jessica Pennell
In meinem Fall war es der World Wide Web Publishing Service, der alles andere daran hinderte, Port 80 abzuhören. Ich kann problemlos mehrere Apache- und Nginx-Dateien gleichzeitig ausführen, aber als der World Wide Web Publishing Service nach dem letzten Windows Update in den Mix kam sonst funktionierte Port 80 nicht mehr.
J. Falsch
4

Es ist höchstwahrscheinlich IIS 6.0 oder höher.

Der HTTP-Protokollstapel (HTTP.sys), der im Kernelmodus ausgeführt wird , empfängt Clientanforderungen und leitet sie an die entsprechende Anforderungswarteschlange weiter. Worker-Prozesse, die im Benutzermodus ausgeführt werden, ziehen die Anforderungen direkt aus ihren eigenen Kernel-Anforderungswarteschlangen und eliminieren die Prozesssprünge, die in IIS 5.0 (und auch im IIS 5.0-Isolationsmodus) auftreten, wenn der Webserver eine Anforderung an ein High sendet -Isolierung, nicht prozessuale Anwendung. Da diese zusätzlichen Prozesssprünge im Worker-Prozessisolationsmodus eliminiert werden, kann IIS die Anwendungsisolation bereitstellen, ohne die Leistung zu beeinträchtigen.

Mark Allen
quelle
Hmm, ich dachte, IIS wird als "inetinfo.exe" angezeigt - ich denke, es gibt Situationen, in denen dies nicht der Fall ist.
Mark Henderson
Es tut! :) Es wird als beides angezeigt - das Benutzermodus-Zeug geht in inetfino.exe, aber das Kernel-Modus-Zeug kommt von "system".
Mark Allen
1

Versuchen Sie, das zu stoppen, HTTP.SYSindem Sie in Device Manager/Non Plug and Play Driversund Select gehen HTTP. Versuchen Sie , es zu stoppen, und Sie sehen Dienste, die dieses HTTP auslösen, um Port 80 zu verwenden.

Farooque
quelle
0

Zuletzt habe ich überprüft, dass Sie den "System" -Prozess nicht beenden können, und wenn Sie dies tun, wird dies vermutlich katastrophale Auswirkungen haben. Ich werde es auch nicht auf dem PC versuchen, auf dem ich mich gerade befinde!

Es scheint, dass etwas in Windows selbst zuhört: 80 - Ich werde vermuten, dass es etwas Bösartiges sein könnte. Der beste Weg, dies herauszufinden, ist entweder:

a) Öffnen Sie einen Webbrowser für localhost und sehen Sie, was auf Sie zukommt

b) Starten Sie Telnet und Telnet auf localhost 80 und führen Sie ein grundlegendes HTTP-GET (z. B. GET /) aus, um zu sehen, was es zurückgibt

B ist die bessere Option, wenn Sie glauben, Malware zu hosten, da Sie sich nicht wirklich erneut infizieren möchten. Obwohl es vielleicht keine Rolle spielt.

Mark Henderson
quelle
Es kann keine Malware sein, da sie auf meinem VPS nicht sehr lange läuft. Ich benutze es auch nicht, um im Internet zu surfen, also ...
0

Ich fand die Antwort auf diese Frage unter: /superuser/352017/pid4-using-port-80

Insbesondere wenn es sich um System Process 4 handelt, müssen Sie den HTTP.sys-Treiber deaktivieren, der bei Bedarf von einem anderen Dienst wie Windows Remote Management oder Print Spooler unter Windows 7 oder 2008 gestartet wird.

  1. Gehen Sie zum Geräte-Manager, wählen Sie "Versteckte Geräte anzeigen" aus dem Menü / der Ansicht, gehen Sie zu "Nicht-Plug-and-Play-Treiber" / HTTP, doppelklicken Sie darauf, um es zu deaktivieren (oder stellen Sie es auf manuell ein, einige Dienste hängen davon ab).

Starten Sie neu und verwenden Sie netstat -nao | Suchen Sie nach ": 80", um zu überprüfen, ob 80 noch verwendet wird.

Ich habe auch versucht, den Port durch einfaches Ausführen eines "Net Stop http" wiederherzustellen, aber der Port schien nie wieder freigegeben zu werden. Das obige hat jedoch für mich funktioniert, und ich brauchte keine anderen Dienste, die von diesem Treiber abhängig waren.

Adam Trimeloni
quelle
0

Windows Sync Share hat uns unter Windows 2012 R2 umgebracht. Nachdem wir diese Funktion deaktiviert hatten, lief alles einwandfrei.

Chef Roberts
quelle
0

In meinem Fall lag es daran, dass das Carbon Black-Antivirus irgendwie einen Würgegriff an Port 80 hatte. Ich habe Stunden damit verbracht, es herauszufinden, deshalb fühle ich mich verpflichtet, es zu teilen, nur für den Fall, dass es eine arme Mitseele zum Licht führt :) Ich ziehe an Ich weiß nicht, wie es genau behoben wurde. Fragen Sie Ihr Server- / Netzwerkteam!

zero01alpha
quelle
-1

Ich habe dies durch eine Stackoverflow-Frage gelöst. Folgen Sie diesem Link , um die Lösung zu finden, wie IIS auf Port 80 aufhört, nach einer bestimmten IP-Adresse zu suchen.

Gemeinschaft
quelle