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?
lsof
grep que você usou retornaria em branco; números de porta são mapeados para/etc/services
nomes. Tentelsof -i | grep http
...-i :port
formato, somente se você grep. O que vai ser um problema é quelsof
privs necessidades de raiz para ver os processos de outros usuários, então você deve usarsudo lsof -i :80
(e eu experimentá-lo sem ogrep
, só para ter certeza ...)lsof -i :80
enquanto 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 ...)Respostas:
Você precisa executar estes comandos
root
para mostrar os processos de outros usuários, por exemplo:O Mac OS X inclui um servidor da web Apache que pode ser controlado usando
apachectl
comoroot
. Geralmente é iniciado vialaunchd
, 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 :fonte
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?sudo apachectl stop
no terminal.sudo lsof -i -P | grep -i "80"
de superuser.com/questions/984919/...Apenas para esclarecer a resposta real, caso os usuários estejam procurando por isso.
O launchd varre a
/System/Library/LaunchDaemons/
inicialização e trabalha comorg.apache.httpd.plist
isso quando o apache é iniciado, ele precisa encaminhar a porta 80 para ele.sudo apachectl start
foi feitoNo entanto, houve um erro no
httpd.conf
arquivo, o que significa que o apache não foi iniciado, embora isso não tenha sido relatado peloapachectl
comando.O Launchd decidiu escutar na porta 80, pois achou que o apache estava funcionando.
Mas o conteúdo de qualquer solicitação HTTP resultou em um fechamento imediato da conexão.
sudo lsof -i :80
não rendeu respostassudo netstat -an | grep LISTEN
não deu respostas para a porta 80até o momento, não havia informações em nenhuma ferramenta de diagnóstico que mostrasse que a porta 80 estava em uso ou escutando.
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.
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
fonte
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.Eu precisei
/Applications/Uninstall Avast.app
sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
para impedir que ele use a porta 80.
fonte