A porta 80 está sendo usada pelo SYSTEM (PID 4), o que é isso?

9

Estou tentando usar a porta 80 no meu servidor de aplicativos, mas quando executo "netstat -aon", recebo

TCP 0.0.0.0:80 0.0.0.0↓ LISTENING 4

Quando olho para o processo no gerenciador de tarefas, ele mostra que o PID 4 é SYSTEM, é isso, não extensão ... nada, apenas "SYSTEM". O que está acontecendo aqui?

Tenho medo de terminar esse processo, o que faço?


fonte
net stop http TRABALHOU PARA MIM
Saurabh Sinha

Respostas:

14

Embora as pessoas estejam apontando serviços específicos (por exemplo, o "Serviço do Agente de Implantação da Web"), isso não resolve a causa raiz. Se você apenas desabilitar os serviços que desencadeiam o problema, é provável que ele volte a sua cabeça no futuro em uma aparência marginalmente diferente. Portanto, vale a pena entender o que está errado, porque isso leva a uma solução melhor.

Esse problema surge quando um servidor de aplicativos deseja o controle total da porta 80. Isso entra em conflito com um recurso do Windows projetado para permitir que múltiplos processos tratem solicitações na porta 80. É totalmente possível ter qualquer número de processos todos recebendo solicitações HTTP na porta 80, porque o Windows possui um mecanismo de despacho HTTP interno. Cada processo pode informar ao Windows quais URLs ele deseja manipular.

No entanto, se um servidor de aplicativos ignorar isso totalmente, você estará de volta ao mundo menos flexível dos sockets da velha escola, onde apenas um processo pode receber solicitações destinadas a qualquer porta em particular.

Isso pode ser bom - se você realmente não deseja nada além de um processo específico que lida com solicitação HTTP na porta 80, torna-se tolerável usar um servidor de aplicativos que não suporta os mecanismos mais flexíveis oferecidos pelo Windows. (E alguns servidores de aplicativos populares têm essa limitação. Por exemplo, AFAIK, o Tomcat é incapaz de jogar bem com os outros e insiste em ter a porta 80 totalmente para si. Portanto, se você estiver usando o servidor de aplicativos de outra pessoa, pode ser impraticável adapte-o para usar o mecanismo preferido.)

O Windows tenta acomodar esses serviços inflexíveis, não vinculando seu mecanismo de envio à porta 80 até que algo solicite isso ativamente. (É por isso que você não necessariamente vê um problema inicialmente, mas pode enfrentar esse problema após algum tipo de atualização ou alteração de configuração.) Mas confiar nisso não é uma solução muito sólida - você está basicamente confiando na sorte de que nada tenta escutar na porta 80 antes de o servidor de aplicativos ser iniciado. (Há várias razões pelas quais um processo pode tentar especulativamente se registrar para determinados URLs na porta 80 e recuar se não for permitido.)

Portanto, se você deseja que um serviço tenha acesso exclusivo à porta 80, é melhor informar ao Windows. Não é realmente bom o suficiente tentar desativar todos os serviços que possam tentar usar o mecanismo de compartilhamento de portas usual, porque é difícil ter certeza de que você encontrou todos eles. (Principalmente quando as atualizações do Windows parecem alterar o que está ativado por padrão.) Provavelmente, é uma boa prática desativar os que você conhece, mas é melhor abordar isso dos dois lados: desabilite os serviços que você não deseja e também garanta que não possível para aqueles que você não conhecia.

Por padrão HTTP.SYS(a porta subjacente que compartilha o mecanismo de envio HTTP no Windows) pode escutar em todos os endereços. Mas você pode dizer para não. Esta página mostra uma maneira de fazer isso: http://www.mikeplate.com/2011/11/06/stop-http-sys-from-listening-on-port-80-in-windows/

Essa é uma maneira relativamente leve de fazê-lo, porque ainda permite escutar no host local para IPv6. Ele libera a porta 80 do IPv4. Você pode ir além com configurações mais especializadas. (Você pode até desativar HTTP.SYScompletamente, mas isso pode quebrar coisas usando outras portas que não sejam 80, por isso pode causar problemas.)

Mas o que quer que você faça, o objetivo é garantir que HTTP.SYSnão tente escutar na porta 80 no endereço IP de seu interesse. Depois de fazer isso, você não precisa se preocupar com a desativação de serviços, nem com outras alterações que possam apresentar o problema novamente. Se você garantiu que o terminal que você precisa está efetivamente fora dos limites do compartilhamento de portas, deverá descobrir que o processo do sistema para de vincular-se a ele.

Ian Griffiths
fonte
Obrigado por uma resposta muito informativa. Como um usuário de Unix, eu não sabia que o Windows tem um mecanismo de envio HTTP para permitir que múltiplos processos simultâneos resposta a pedidos na porta 80.
Anthony Geoghegan
11

O culpado era o Serviço de Agente de Implantação da Web.

Solução melhor do net stop httpque interromper os serviços chamados "Serviço do Agente de Implantação da Web".

Avinash
fonte
3
Cara! Fodendo práticas horríveis da Microsoft! Eu tive que passar horas tentando descobrir por que havia uma instância do IIS (a julgar pelos cabeçalhos ao se conectar via telnet) escutando 0.0.0.0:80 e impedindo que o Apache fosse iniciado, mesmo quando eu removi o IIS dos recursos / funções do Windows. Sim, era o Serviço do Agente de Implantação da Web, bloqueando todo o acesso à porta 80 em qualquer endereço! Cara!
Francisco Zarabozo
2
Mais um caso de um servidor de aplicativos usando práticas inadequadas. O Windows possui um mecanismo projetado para permitir que vários processos tratem solicitações HTTP na porta 80. É totalmente possível que o IIS coexista com vários outros aplicativos, todos tratando solicitações da porta 80. É por isso que o processo do sistema escuta 80 por você - ele pode despachar cada solicitação para o processo que for responsável pela URL específica. Infelizmente, se um servidor de aplicativos ignora isso totalmente e deseja a propriedade total da porta 80, tudo dá errado. Se o servidor de aplicativos não ignorar a convenção, você não terá esse problema.
Ian Griffiths
11
Ok, acabei de saber que o Nginx ignora a convenção "this MS" ... e acabou de desativar o serviço.
Jens A. Koch
4
O nome específico do serviço que você precisa parar e desativar é World Wide Web Publishing Service. Embora o "net stop http" seja uma resposta realmente brutal, cheia de efeitos colaterais desagradáveis ​​- serviços como o spooler de impressão e parte do processo de logon do Windows 10 dependem do http - o que ele fará se você tentar, é fornecer uma lista de serviços que dependem de http e a opção de voltar. Tentando os poucos serviços dessa lista, um por um, é como descobri que o Serviço de Publicação da WWW era o culpado.
Jessica Pennell
No meu caso, foi o Serviço de Publicação na World Wide Web que impediu que todo o resto escutasse a porta 80. Posso ter vários apache e nginx executando sem problemas ao mesmo tempo, mas quando o Serviço de Publicação na World Wide Web entrou em cena após o recente Windows Update mais na porta 80 parou de funcionar.
J. Errado
4

Provavelmente é o IIS 6.0 ou posterior.

A pilha do protocolo HTTP (HTTP.sys), que é executada no modo kernel , recebe solicitações do cliente e as direciona para a fila de solicitações apropriada. Os processos de trabalho, que são executados no modo de usuário, extraem as solicitações diretamente de suas próprias filas de solicitações de kernel, eliminando os saltos de processo que ocorrem no IIS 5.0 (e que também ocorrem no modo de isolamento do IIS 5.0) quando o servidor da Web envia uma solicitação para um High aplicação fora de processo. Como esses saltos de processo extras são eliminados no modo de isolamento do processo do operador, o IIS pode fornecer isolamento do aplicativo sem sacrificar o desempenho.

Mark Allen
fonte
Hmm, pensei que o IIS aparecesse como "inetinfo.exe" - acho que há algumas situações em que não é.
Mark Henderson
Faz! :) Ele aparece como ambos - o item do modo usuário entra no inetfino.exe, mas o item do modo kernel vem do "sistema".
Mark Allen
1

Tente parar o HTTP.SYSentrando Device Manager/Non Plug and Play Driverse Select HTTP, tentar pará-lo e você vai ver os serviços que estão provocando este HTTP para a porta uso 80.

Farooque
fonte
0

Última vez que verifiquei, você não pode terminar o processo do "sistema" e, se o fizer, acho que terá efeitos catastróficos. Também não vou tentar no PC em que estou agora!

Parece que algo dentro do próprio Windows está ouvindo: 80 - Acho que pode ser algo malicioso. A melhor maneira de descobrir é:

a) Abra um navegador da web para o host local e veja o que aparece

b) Inicie o Telnet e o telnet para o host local 80 e execute algum HTTP GET básico (por exemplo, GET /) e veja o que ele retorna

B é a melhor opção se você acha que pode estar hospedando malware, pois não deseja se infectar novamente. Embora talvez isso não importe.

Mark Henderson
fonte
não pode ser um malware, pois está no meu VPS e não está em funcionamento há muito tempo. Eu também não usá-lo para navegar na web por isso ...
0

Encontrei a resposta para esta pergunta em: /superuser/352017/pid4-using-port-80

Especificamente quando é o Processo do Sistema 4, é necessário desativar o driver HTTP.sys iniciado por demanda por outro serviço, como o Gerenciamento Remoto do Windows ou o Spooler de Impressão no Windows 7 ou 2008.

  1. Vá para o gerenciador de dispositivos, selecione "Mostrar dispositivos ocultos" no menu / exibição, vá para "Driver não Plug and Play" / HTTP, clique duas vezes nele para desativá-lo (ou defina-o como manual, alguns serviços dependem dele).

Reinicialize e use o netstat -nao | encontre ": 80" para verificar se 80 ainda está sendo usado.

Também tentei recuperar a porta executando apenas um "net stop http", mas a porta nunca parecia ter sido liberada novamente. O que foi dito acima funcionou para mim e o II não precisava dos outros serviços que dependiam desse driver.

Adam Trimeloni
fonte
0

O compartilhamento de sincronização do Windows foi o que nos matou no Windows 2012 R2. Depois que desativamos esse recurso, tudo correu bem.

Chefe Roberts
fonte
0

No meu caso, foi devido ao antivírus Carbon Black, de alguma forma, invadir a porta 80. Passei horas tentando descobrir, então me sinto obrigado a compartilhar apenas no caso de levar uma alma pobre para a luz :) Eu não Para saber exatamente como foi corrigido, pergunte ao seu servidor / equipe de rede!

zero01alpha
fonte
-1

Eu resolvi isso através de uma questão de stackoverflow. Siga este link para encontrar a solução de como fazer com que o IIS pare de escutar na porta 80 um endereço IP especificado.

Comunidade
fonte