Não faço ideia do que está escutando na porta 80 no OS X


34

Estou no OSX Mountain Lion 10.8.3 e reinicializei meu Mac recentemente.

Quero iniciar um serviço (como o Apache na porta 80), mas já existe algo acontecendo com a porta 80:

telnet localhost 80

Trying ::1...
Connected to localhost.
Escape character is '^]'.

Espere, eu ouvi você dizer, você pode encontrar isso com lsof ou netstat. Exceto que não há nada lá

netstat -an | grep LISTEN | grep '\.80'

*comes back blank*

lsof -i :80 | grep LISTEN

*comes back blank

Então, pelo que sei sobre sistemas unix, acho que deve ser uma regra de encaminhamento de pacotes? Ou seja, os pacotes estão sendo encaminhados da porta de entrada 80 para outra coisa, que está escutando nesse serviço.

ipfw show

65535 0 0 allow ip from any to any

Hmm, nada de anormal lá

pfctl -s nat

No ALTQ support in kernel
ALTQ related functions disabled

Nada incomum lá

Minha pergunta é: como posso exibir regras de encaminhamento de pacotes ... No Linux, eu posso apenas executar o iptables -L -t NAT ou o iptables -L. Ou, como alternativa, algum especialista em OSX pode me ajudar a diagnosticar esse problema?


Não é uma resposta direta à sua pergunta interessante, mas: e se você apontar o navegador para http: // localhost ?
Arjan

O lsofgrep que você usou retornaria em branco; números de porta são mapeados para /etc/servicesnomes. Tente lsof -i | grep http...
Nevin Williams

1
Na verdade, o mapeamento / etc / services não é um problema se você usar o -i :portformato, somente se você grep. O que vai ser um problema é que lsofprivs necessidades de raiz para ver os processos de outros usuários, então você deve usar sudo lsof -i :80(e eu experimentá-lo sem o grep, só para ter certeza ...)
Gordon Davisson

1
Oi tudo, obrigado pelas sugestões até agora, mas ainda não apareceu qualquer coisa - até mesmo como root, e sem greps, não há nada listado como realmente ouvir a porta 80.
Geoff

Você tentou lsof -i :80enquanto ainda estava conectado nessa sessão Telnet? E além de tentar http: // localhost / , talvez digitar algo no prompt do Telnet revele algo ...? (Mais uma vez, eu sei: mesmo se você descobrir isso dessa forma, não seria a resposta à sua pergunta ...)
Arjan

Respostas:


45

Você precisa executar estes comandos rootpara mostrar os processos de outros usuários, por exemplo:

sudo lsof -i ':80'

O Mac OS X inclui um servidor da web Apache que pode ser controlado usando apachectlcomo root. Geralmente é iniciado via launchd, o arquivo de configuração correspondente é /System/Library/LaunchAgents/org.apache.httpd.plist. Se não é este Apache em execução na porta 80, provavelmente é iniciado , a implementação da Apple de um gerenciador de daemon. De acordo com a Wikipedia :

Quando o launchd varre as listas de tarefas no momento da inicialização, ele reserva e escuta todas as portas solicitadas por essas tarefas. Se isso for indicado no plist pela chave "OnDemand", o daemon não será realmente carregado no momento. Em vez disso, o launchd escutará a porta, iniciará o daemon quando necessário e o desligará quando não estiver. Após o daemon ser carregado, o launchd o acompanhará e garantirá que esteja em execução, se necessário.


Então, acho que estava certa a minha ideia de que sudo lsof -i ':80' talvez não retornasse nada, a menos que alguém execute isso enquanto estiver conectado na sessão Telnet? Mas mesmo sem esses comandos, http: // localhost / provavelmente ainda mostraria alguma página de boas-vindas do Apache?
Arjan 21/05

(Eu acredito que a sua resposta é provavelmente a solução, ele só não coincidir com todos os comentários do OP.)
Arjan

1
Obrigado por esta resposta brilhante. Agora eu consegui resolver o problema: 1. Houve um erro no httpd.conf, portanto o sudo apachectl start não estava iniciando o apache. 2. Mas o launchd estava escutando na porta 80, pronta para encaminhar solicitações para um servidor inexistente. 3. No entanto, o launchd não estava ouvindo no sentido convencional - isto é - os resultados do sudo lsof -i: 80 estavam em branco, da mesma forma para o netstat 4. Acho que o launchd faz alguma mágica como o xinetd, pois não escuta oficialmente uma porta, mas de alguma forma consegue permitir conexões com a porta subornando o kernel.
geoff

2
Para mim, o que resolveu o problema estava sendo executado sudo apachectl stopno terminal.
26717 MikeiLL

Isto não funcionou para mim, mas esta versão foi mostrar o que estava correndo (OS High Sierra 10.13.6) sudo lsof -i -P | grep -i "80"de superuser.com/questions/984919/...
RoboBear

7

Apenas para esclarecer a resposta real, caso os usuários estejam procurando por isso.

  1. O launchd varre a /System/Library/LaunchDaemons/inicialização e trabalha com org.apache.httpd.plistisso quando o apache é iniciado, ele precisa encaminhar a porta 80 para ele.

  2. sudo apachectl start foi feito

  3. No entanto, houve um erro no httpd.confarquivo, o que significa que o apache não foi iniciado, embora isso não tenha sido relatado pelo apachectlcomando.

  4. O Launchd decidiu escutar na porta 80, pois achou que o apache estava funcionando.

  5. Mas o conteúdo de qualquer solicitação HTTP resultou em um fechamento imediato da conexão.

  6. sudo lsof -i :80 não rendeu respostas

  7. sudo netstat -an | grep LISTEN não deu respostas para a porta 80

  8. até o momento, não havia informações em nenhuma ferramenta de diagnóstico que mostrasse que a porta 80 estava em uso ou escutando.

  9. corrigir o httpd.conf do apache e reiniciar o apache com sucesso para que o httpd estivesse na tabela ps, levou as solicitações HTTP a serem bem-sucedidas.

  10. Eu estava, portanto, confundindo que não podia executar o apache porque já havia algo escutando na porta 80, em vez de o apache conf em si ser a causa


Então, o que havia de errado com o httpd.conf? Estou com esse problema agora e não tenho certeza de como proceder com base na sua resposta aqui .. ??
Tirou Angell

0

Acabei de encontrar o mesmo problema com o OSX El Capitan e o antivírus Avast. sudo lsof -i ':80'mostrou uma conexão com o avast.com.

me@destop ~|master$ sudo lsof -i ':80'
Password:
COMMAND    PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
com.avast 7964 root   58u  IPv4 0xc4c1bba31fcc2c7f      0t0  TCP 192.168.100.111:52381->mia04-004.ff.avast.com:http (ESTABLISHED)

Eu precisei

  1. desinstalar o Avast com /Applications/Uninstall Avast.app
  2. sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
  3. reiniciar

para impedir que ele use a porta 80.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.