El sistema utiliza el puerto 80 (PID 4), ¿qué es eso?

9

Estoy tratando de usar el puerto 80 para mi servidor de aplicaciones, pero cuando realizo "netstat -aon" obtengo

TCP 0.0.0.0:80 0.0.0.0:0 ESCUCHANDO 4

Cuando busco el proceso en el administrador de tareas, muestra que PID 4 es SYSTEM, eso es, no extensión ... nada, solo "SYSTEM". ¿Que está pasando aqui?

Tengo miedo de terminar este proceso, ¿qué hago?


fuente
net stop http TRABAJÓ PARA MÍ
Saurabh Sinha

Respuestas:

14

Aunque las personas señalan servicios específicos (por ejemplo, el "Servicio del Agente de implementación web"), esto no aborda la causa raíz. Si solo deshabilita los servicios que desencadenan el problema, es probable que en el futuro vuelva a tener la cabeza en una forma marginalmente diferente. Por lo tanto, vale la pena entender qué está mal, porque eso conduce a una mejor solución.

Este problema surge cuando un servidor de aplicaciones quiere el control total del puerto 80. Esto entra en conflicto con una característica de Windows que está diseñada para permitir que múltiples procesos manejen solicitudes en el puerto 80. Es completamente posible tener cualquier cantidad de procesos que reciban solicitudes HTTP en el puerto 80, porque Windows tiene un mecanismo de despacho HTTP incorporado. Cada proceso puede decirle a Windows qué URL quiere manejar.

Sin embargo, si un servidor de aplicaciones ignora esto por completo, entonces estás de vuelta en el mundo de los sockets menos flexibles de la vieja escuela donde solo un proceso puede recibir solicitudes destinadas a un puerto en particular.

Eso puede estar bien: si realmente no desea nada más que un proceso particular que maneja la solicitud HTTP en el puerto 80, entonces es tolerable usar un servidor de aplicaciones que no sea compatible con los mecanismos más flexibles que ofrece Windows. (Y algunos servidores de aplicaciones populares tienen esta limitación. Por ejemplo, AFAIK, Tomcat es incapaz de jugar bien con otros e insiste en tener el puerto 80 solo. Por lo tanto, si está utilizando el servidor de aplicaciones de otra persona, puede ser poco práctico para adaptarlo para usar el mecanismo preferido.)

Windows intenta acomodar estos servicios inflexibles al no vincular su mecanismo de envío al puerto 80 hasta que algo lo solicite activamente. (Es por eso que no necesariamente verá un problema inicialmente, pero puede encontrarse con este problema después de algún tipo de actualización o cambio de configuración). Pero confiar en esto no es una solución muy sólida: esencialmente confía en la suerte de que nada intenta escuchar bajo el puerto 80 antes de que se inicie su servidor de aplicaciones. (Hay varias razones por las que un proceso podría intentar especulativamente registrarse para ciertas URL en el puerto 80 y retroceder si no está permitido).

Entonces, si desea que un servicio tenga acceso exclusivo al puerto 80, será mejor que le diga a Windows. No es lo suficientemente bueno como para intentar desactivar todos los servicios que podrían intentar utilizar el mecanismo habitual de uso compartido de puertos, porque es difícil confiar en que los haya encontrado a todos. (Particularmente cuando las actualizaciones de Windows parecen cambiar lo que está activado de manera predeterminada). Probablemente sea una buena práctica deshabilitar las que conoce, pero es mejor abordar esto desde ambos extremos: deshabilite los servicios que no desea y también asegúrese de que no posible para los que no sabías que te podrían hacer tropezar.

De forma predeterminada HTTP.SYS(el mecanismo de envío HTTP de uso compartido de puertos subyacente en Windows) puede escuchar en todas las direcciones. Pero puedes decir que no lo haga. Esta página muestra una forma de hacerlo: http://www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/

Esa es una forma relativamente ligera de hacerlo, porque todavía permite escuchar en localhost para IPv6. Simplemente libera el puerto 80 de IPv4. Podría llevarlo más lejos con una configuración más especializada. (Incluso podría deshabilitarlo por HTTP.SYScompleto, pero eso podría romper cosas usando puertos que no sean 80, por lo que puede causar problemas)

Pero haga lo que haga, lo importante es asegurarse de que HTTP.SYSno intente escuchar en el puerto 80 en la dirección IP que le interesa. Una vez que haya hecho eso, no necesita preocuparse por deshabilitar los servicios, ni debe preocuparse por otros cambios que reintroducen el problema. Si se ha asegurado de que el punto final que necesita esté efectivamente fuera de los límites para el uso compartido de puertos, entonces debe encontrar que el proceso del sistema deja de vincularse a él.

Ian Griffiths
fuente
Gracias por una respuesta muy informativa. Como usuario de Unix, no sabía que Windows tiene un mecanismo de despacho HTTP para permitir que múltiples procesos simultáneos respondan a las solicitudes en el Puerto 80.
Anthony Geoghegan
11

El culpable fue el Servicio de agente de implementación web.

La mejor solución net stop httpes detener los servicios llamados "Servicio de agente de implementación web".

Avinash
fuente
3
¡Hombre! ¡Malditas prácticas horribles de Microsoft! Tuve que pasar horas tratando de averiguar por qué había una instancia de IIS (a juzgar por los encabezados cuando se conectaba a través de telnet) escuchando en 0.0.0.0:80 y evitando que Apache se iniciara, INCLUSO cuando eliminé IIS de las funciones / roles de Windows. Sí, fue el Servicio del Agente de implementación web, que bloqueó todo acceso al puerto 80 en cualquier dirección. ¡Hombre!
Francisco Zarabozo
2
Más un caso de un servidor de aplicaciones que usa malas prácticas. Windows tiene un mecanismo diseñado para permitir que múltiples procesos manejen las solicitudes HTTP en el puerto 80. Es completamente posible que IIS coexista con varias otras aplicaciones que manejan todas las solicitudes del puerto 80. Esta es la razón por la cual el proceso del sistema escucha el 80 por usted: puede enviar cada solicitud a cualquier proceso responsable de la URL particular. Desafortunadamente, si un servidor de aplicaciones ignora esto por completo y quiere la propiedad total del puerto 80, todo sale mal. Si el servidor de aplicaciones no ignora la convención, no se obtiene este problema.
Ian Griffiths
1
Ok, acabo de enterarme de que Nginx ignora la convención "esta MS" ... y simplemente deshabilitó el servicio.
Jens A. Koch
44
El nombre específico del servicio que necesita detener y deshabilitar es World Wide Web Publishing Service. Si bien "net stop http" es en sí una respuesta realmente brutal llena de efectos secundarios desagradables: los servicios como su cola de impresión y parte del proceso de inicio de sesión de Windows 10 dependen de http; lo que hará si lo prueba es darle una lista de servicios que dependen de http y la opción de retroceder. Al probar el pequeño puñado de servicios en esa lista uno por uno, descubrí que el servicio de publicación WWW era el culpable.
Jessica Pennell
En mi caso, fue el Servicio de publicación World Wide Web el que impidió que todo lo demás escuchara el puerto 80. Puedo tener múltiples apache y nginx ejecutándose sin problemas al mismo tiempo, pero cuando el Servicio de publicación World Wide Web entró en la mezcla después de la reciente actualización de Windows todo más en el puerto 80 dejó de funcionar.
J. Incorrecto
4

Es muy probable que sea IIS 6.0 o posterior.

La pila de protocolo HTTP (HTTP.sys), que se ejecuta en modo kernel , recibe solicitudes de clientes y las dirige a la cola de solicitudes correspondiente. Los procesos de trabajo, que se ejecutan en modo de usuario, extraen las solicitudes directamente de sus propias colas de solicitud de kernel, eliminando los saltos de proceso que ocurren en IIS 5.0 (y que también ocurren en el modo de aislamiento de IIS 5.0) cuando el servidor web envía una solicitud a High -Aislamiento, aplicación fuera de proceso. Debido a que estos saltos de proceso adicionales se eliminan en el modo de aislamiento de procesos de trabajo, IIS puede proporcionar aislamiento de aplicaciones sin sacrificar el rendimiento.

Mark Allen
fuente
Hmm, pensé que IIS apareció como "inetinfo.exe". Supongo que hay algunas situaciones en las que no lo es.
Mark Henderson, el
¡Lo hace! :) Aparece como ambos: el material del modo de usuario va en inetfino.exe, pero el material del modo de núcleo proviene del "sistema".
Mark Allen
1

Intente detenerlo HTTP.SYSentrando Device Manager/Non Plug and Play Driversy seleccione HTTP, intente detenerlo y verá los servicios que activan este HTTP para usar el puerto 80.

Farooque
fuente
0

La última vez que lo verifiqué, no puede finalizar el proceso del "sistema", y si lo hace, supongo que tendrá efectos catastróficos. ¡No voy a probarlo en la PC en la que estoy ahora tampoco!

Parece que algo dentro de Windows está escuchando: 80 - Voy a adivinar que podría ser algo malicioso. La mejor manera de averiguarlo es:

a) Abra un navegador web para localhost y vea qué ocurre

b) Inicie Telnet y telnet en localhost 80 y ejecute algunos HTTP GET básicos (por ejemplo, GET /) y vea qué devuelve

B es la mejor opción si cree que podría estar alojando malware, ya que realmente no desea volver a infectarse. Aunque tal vez no importe.

Mark Henderson
fuente
no puede ser malware, ya que está en mi VPS que no ha estado funcionando durante mucho tiempo. Asimismo, no lo uso para navegar por la web así que ...
0

Encontré la respuesta a esta pregunta en: /superuser/352017/pid4-using-port-80

Específicamente, cuando se trata del Proceso del sistema 4, debe deshabilitar el controlador HTTP.sys que se inicia bajo demanda por otro servicio, como Windows Remote Management o Print Spooler en Windows 7 o 2008.

  1. Vaya al administrador de dispositivos, seleccione "mostrar dispositivos ocultos" en el menú / vista, vaya a "Controlador no Plug and Play" / HTTP, haga doble clic para desactivarlo (o configúrelo en manual, algunos servicios dependían de ello).

Reiniciar y usar netstat -nao | busque ": 80" para verificar si 80 todavía se usa.

También intenté recuperar el puerto simplemente ejecutando un "net stop http", pero el puerto nunca pareció liberarse. Sin embargo, lo anterior funcionó para mí y no necesitaba los otros servicios que dependían de este controlador.

Adam Trimeloni
fuente
0

Windows Sync Share es lo que nos mató en Windows 2012 R2. Una vez que deshabilitamos esta función, todo salió bien.

Jefe Roberts
fuente
0

En mi caso, se debió a que el antivirus Carbon Black de alguna manera tomó un control absoluto en el puerto 80. Pasé horas tratando de resolverlo, por lo que me siento obligado a compartir solo en caso de que lleve a un alma pobre a la luz :) No sé cómo se solucionó exactamente, ¡pregúntale a tu servidor / equipo de red!

zero01alpha
fuente
-1

He resuelto esto a través de una pregunta de stackoverflow. Siga este enlace para encontrar la solución sobre cómo hacer que IIS deje de escuchar en el puerto 80 para una dirección IP especificada.

Comunidad
fuente