La porta 80 viene utilizzata da SYSTEM (PID 4), che cos'è?


9

Sto cercando di utilizzare la porta 80 per il mio server delle applicazioni, ma quando eseguo "netstat -aon" ottengo

TCP 0.0.0.0:80 0.0.0.0:0 ASCOLTO 4

Quando cerco il processo in Task Manager, mostra che PID 4 è SISTEMA, questo è tutto, non estensione ... niente, solo "SISTEMA". Cosa sta succedendo qui?

Ho paura di terminare questo processo, cosa devo fare?


net stop http FUNZIONATO PER ME
Saurabh Sinha

Risposte:


14

Sebbene le persone stiano segnalando servizi specifici (ad es. "Web Deployment Agent Service"), ciò non riesce ad affrontare la causa principale. Se disabiliti solo i servizi che innescano il problema, è probabile che in futuro si rialzerà di nuovo in modo leggermente diverso. Quindi vale la pena capire cosa non va, perché questo porta a una soluzione migliore.

Questo problema si presenta quando un server delle applicazioni desidera il controllo totale della porta 80. Ciò è in conflitto con una funzionalità di Windows progettata per consentire a più processi di gestire le richieste sulla porta 80. È del tutto possibile avere un numero qualsiasi di processi che ricevono tutte richieste HTTP sulla porta 80, perché Windows ha un meccanismo di invio HTTP incorporato. Ogni processo può dire a Windows quali URL vuole gestire.

Tuttavia, se un server delle applicazioni lo ignora totalmente, allora sei di nuovo nel mondo dei socket della vecchia scuola meno flessibile in cui solo un processo può ricevere richieste destinate a una determinata porta.

Questo potrebbe andare bene - se davvero non vuoi altro che un particolare processo che gestisca la richiesta HTTP sulla porta 80, allora diventa tollerabile usare un server delle applicazioni che non supporta i meccanismi più flessibili offerti da Windows. (E alcuni server di app popolari hanno questa limitazione. Ad esempio, AFAIK, Tomcat non è in grado di giocare bene con gli altri e insiste per avere la porta 80 tutta per sé. Quindi, se stai usando l'app server di qualcun altro, potrebbe non essere pratico adattalo per usare il meccanismo preferito.)

Windows tenta di accogliere tali servizi non flessibili non vincolando il suo meccanismo di invio alla porta 80 fino a quando qualcosa non lo richiede attivamente. (Questo è il motivo per cui inizialmente non vedrai necessariamente un problema, ma puoi imbatterti in questo problema dopo una sorta di aggiornamento o modifica della configurazione.) Ma fare affidamento su questa non è una soluzione molto solida - stai essenzialmente confidando nella fortuna che niente tenta di ascoltare sotto la porta 80 prima dell'avvio del server delle app. (Esistono vari motivi per cui un processo potrebbe tentare in modo speculativo di registrarsi per determinati URL sulla porta 80 e arretrare se non è consentito.)

Quindi, se si desidera che un servizio abbia accesso esclusivo alla porta 80, è meglio dirlo a Windows. Non è abbastanza buono per tentare di disattivare tutti i servizi che potrebbero tentare di utilizzare il solito meccanismo di condivisione delle porte, perché è difficile essere sicuri di averli trovati tutti. (Soprattutto quando gli aggiornamenti di Windows sembrano cambiare ciò che è attivo per impostazione predefinita.) Probabilmente è buona pratica disabilitare quelli che conosci, ma è meglio avvicinarsi a questo da entrambe le estremità: disabilitare i servizi che non si desidera e assicurarsi che non sia possibile per quelli che non sapevi per farti inciampare.

Per impostazione predefinita HTTP.SYS(il meccanismo di invio HTTP di condivisione porta sottostante in Windows) è in grado di ascoltare su tutti gli indirizzi. Ma puoi dirlo di no. Questa pagina mostra un modo per farlo: http://www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/

Questo è un modo relativamente leggero per farlo, perché consente ancora l'ascolto su localhost per IPv6. Libera la porta IPv4 80. Potresti andare oltre con una configurazione più specializzata. (Potresti anche disabilitare del HTTP.SYStutto, ma ciò potrebbe rompere le cose usando porte diverse da 80, quindi potrebbe causare problemi.)

Ma qualunque cosa tu faccia, il punto è assicurarti che HTTP.SYSnon tenti di ascoltare sulla porta 80 sull'indirizzo IP che ti interessa. Una volta che lo hai fatto, non devi preoccuparti di disabilitare i servizi, né devi preoccuparti di altre modifiche che reintroducono il problema. Se ti sei assicurato che l'endpoint di cui hai bisogno sia effettivamente fuori dai limiti per la condivisione delle porte, allora dovresti scoprire che il processo di sistema smette di legarsi ad esso.


Grazie per una risposta molto istruttiva. Come utente Unix, non sapevo che Windows abbia un meccanismo di invio HTTP per consentire a più processi simultanei di rispondere alle richieste sulla porta 80.
Anthony Geoghegan,

11

Culprit era Web Deployment Agent Service.

La soluzione migliore net stop httpè quella di arrestare i servizi denominati "Web Deployment Agent Service".


3
Uomo! Fottute orribili pratiche Microsoft! Ho dovuto passare ore a cercare di scoprire perché esistesse un'istanza IIS (a giudicare dalle intestazioni durante la connessione tramite telnet) in ascolto su 0.0.0.0:80 e impedendo l'avvio di Apache, ANCHE quando avevo rimosso IIS dalle funzioni / ruoli di Windows. Sì, era il Web Deployment Agent Service, che bloccava tutti gli accessi alla porta 80 su qualsiasi indirizzo! Uomo!
Francisco Zarabozo,

2
Più un caso di un server di app che utilizza cattive pratiche. Windows ha un meccanismo progettato per consentire a più processi di gestire le richieste HTTP sulla porta 80. È del tutto possibile che IIS coesista con più altre applicazioni che gestiscono tutte le richieste della porta 80. Questo è il motivo per cui il processo di sistema è in ascolto su 80 per te: può inviare ogni richiesta a qualunque processo sia responsabile del particolare URL. Sfortunatamente, se un server di app lo ignora completamente e desidera la proprietà totale della porta 80, tutto va storto. Se il server delle app non ignora la convenzione, non si verifica questo problema.
Ian Griffiths,

1
Ok, ho appena saputo che Nginx ignora la convenzione "questa SM" ... e ho appena disabilitato il servizio.
Jens A. Koch,

4
Il nome specifico del servizio che è necessario arrestare e disabilitare è World Wide Web Publishing Service. Mentre "net stop http" è di per sé una risposta davvero brutale piena di cattivi effetti collaterali - servizi come lo spooler di stampa e parte del processo di accesso a Windows 10 si basano su http - cosa farà se lo provi, è darti un elenco di servizi che dipendono da http e dall'opzione per il backout. Provare uno alla volta i pochi servizi in quell'elenco è come ho scoperto che il colpevole era il servizio di pubblicazione WWW.
Jessica Pennell,

Nel mio caso è stato il servizio di pubblicazione sul World Wide Web che ha impedito a tutto il resto di ascoltare la porta 80. Posso avere contemporaneamente più apache e nginx in esecuzione senza problemi ma quando il servizio di pubblicazione sul World Wide Web è entrato nel mix dopo il recente aggiornamento di Windows tutto altrimenti sulla porta 80 ha smesso di funzionare.
J. Wrong,

4

È molto probabile che IIS 6.0 o versioni successive.

Lo stack del protocollo HTTP (HTTP.sys), che viene eseguito in modalità kernel , riceve le richieste del client e le instrada alla coda di richieste appropriata. I processi di lavoro, che vengono eseguiti in modalità utente, estraggono le richieste direttamente dalle proprie code di richieste del kernel, eliminando i salti di processo che si verificano in IIS 5.0 (e che si verificano anche in modalità di isolamento IIS 5.0) quando il server Web invia una richiesta a un valore elevato -isolamento, applicazione fuori processo. Poiché questi hop di processo aggiuntivi vengono eliminati nella modalità di isolamento dei processi di lavoro, IIS può fornire l'isolamento delle applicazioni senza sacrificare le prestazioni.


Hmm, pensavo che IIS si presentasse come "inetinfo.exe" - immagino ci siano alcune situazioni in cui non lo è.
Mark Henderson,

Lo fa! :) Viene visualizzato come entrambi: la modalità utente va in inetfino.exe, ma la modalità kernel proviene da "sistema".
Mark Allen,

1

Prova a interrompere HTTP.SYSandando in Device Manager/Non Plug and Play Driverse seleziona HTTP, prova a fermarlo e vedrai i servizi che stanno attivando questo HTTP per utilizzare la porta 80.


0

L'ultima volta che ho controllato, non puoi terminare il processo di "sistema" e, se lo fai, immagino che avrà effetti catastrofici. Non ho intenzione di provarlo sul PC che sono in questo momento neanche!

Sembrerebbe che qualcosa dentro Windows stesso stia ascoltando: 80 - Ho intenzione di indovinare che potrebbe essere qualcosa di dannoso. Il modo migliore per scoprirlo è:

a) Aprire un browser Web per localhost e vedere cosa succede

b) Avviare Telnet e telnet su localhost 80 ed eseguire alcuni HTTP GET di base (ad esempio GET /) e vedere cosa restituisce

B è l'opzione migliore se pensi che potresti ospitare malware, poiché non vuoi davvero infettarti di nuovo. Anche se forse non importa.


non può essere un malware come è sul mio VPS che non è attivo e funzionante da molto tempo. Inoltre non lo uso per navigare sul Web, quindi ...

0

Ho trovato la risposta a questa domanda su: /superuser/352017/pid4-using-port-80

In particolare, quando si tratta di Processo di sistema 4, è necessario disabilitare il driver HTTP.sys che viene avviato su richiesta da un altro servizio, come Gestione remota di Windows o Spooler di stampa su Windows 7 o 2008.

  1. Vai a Gestione dispositivi, seleziona "mostra dispositivi nascosti" dal menu / vista, vai a "Driver non Plug and Play" / HTTP, fai doppio clic su di esso per disabilitarlo (o impostalo su manuale, alcuni servizi dipendono da esso).

Riavvia e usa netstat -nao | trova “: 80 ″ per verificare se 80 è ancora usato.

Ho anche provato a riavere la porta semplicemente eseguendo un "net stop http" ma la porta non è mai stata liberata. Quanto sopra ha funzionato per me però, e II non aveva bisogno degli altri servizi che dipendevano da questo driver.


0

Windows Sync Share è ciò che ci ha ucciso su Windows 2012 R2. Una volta disabilitata questa funzione, tutto è andato bene.


0

Nel mio caso era dovuto al fatto che l'antivirus Carbon Black in qualche modo prendesse una stretta sulla porta 80. Ho passato ore a cercare di capirlo, quindi mi sento obbligato a condividere nel caso in cui porti alla luce un'anima povera :) so come è stato corretto esattamente, vai a chiedere al tuo server / team di rete!


-1

Ho risolto questo problema tramite una domanda StackOverflow. Seguire questo collegamento per trovare la soluzione su come impedire a IIS di interrompere l'ascolto sulla porta 80 per un indirizzo IP specificato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.