Je suis sur OSX Mountain Lion 10.8.3 et j'ai récemment redémarré mon Mac.
Je souhaite démarrer un service (comme Apache sur le port 80), mais il se passe déjà quelque chose avec le port 80:
telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Attendez, je vous entends dire, vous pouvez trouver cela avec lsof ou netstat. Sauf qu'il n'y a rien là
netstat -an | grep LISTEN | grep '\.80'
*comes back blank*
lsof -i :80 | grep LISTEN
*comes back blank
Donc, d'après ce que je sais des systèmes Unix, je suppose que cela doit alors être une règle de transmission de paquets? Par exemple, des paquets sont transférés du port entrant 80 vers un autre moyen, qui écoute sur ce service.
ipfw show
65535 0 0 allow ip from any to any
Hmm, rien d'inhabituel là
pfctl -s nat
No ALTQ support in kernel
ALTQ related functions disabled
Rien d'inhabituel là-bas
Ma question est la suivante: comment puis-je afficher les règles de transfert de paquets? Sous Linux, je peux simplement faire iptables -L -t NAT ou iptables -L. Ou encore, des experts en OSX peuvent-ils m'aider à diagnostiquer ce problème?
lsof
grep que vous avez utilisé reviendrait vide; les numéros de port sont mappés aux/etc/services
noms. Essayezlsof -i | grep http
...-i :port
format, mais seulement si vous utilisez grep. Ce qui sera un problème, c'est qu'illsof
faut des privilèges root pour voir les processus des autres utilisateurs, vous devriez donc utilisersudo lsof -i :80
(et je l'essayerais sans legrep
, histoire de m'assurer ...)lsof -i :80
tout en restant connecté dans cette session Telnet? Et en plus d’essayer http: // localhost / , taper quelque chose à cette invite de Telnet révèle quelque chose ...? (Encore une fois, je sais: même si vous le comprenez de la sorte, ce ne serait pas la réponse à votre question ...)Réponses:
Vous devez exécuter ces commandes
root
pour afficher les processus des autres utilisateurs, par exemple:Mac OS X comprend un serveur Web Apache pouvant être contrôlé à l'aide
apachectl
deroot
. Il est généralement lancé vialaunchd
le fichier de configuration correspondant/System/Library/LaunchAgents/org.apache.httpd.plist
. Si ce n'est pas ce Apache en cours d' exécution sur le port 80, il est probablement Launchd , la mise en œuvre d'Apple d'un gestionnaire de démon. Selon Wikipedia :la source
sudo lsof -i ':80'
pourrait ne pas retourner quoi que ce soit, à moins que l' un court tout en étant connecté à la session Telnet? Mais même sans ces commandes, http: // localhost / aurait probablement encore montré une page d'accueil Apache?sudo apachectl stop
dans le terminal.sudo lsof -i -P | grep -i "80"
de superuser.com/questions/984919/...Juste pour que la réponse soit claire au cas où les utilisateurs le rechercheraient.
launchd analyse le fichier
/System/Library/LaunchDaemons/
au démarrage et en déduitorg.apache.httpd.plist
que lors du démarrage d'apache, il doit lui transférer le port 80.sudo apachectl start
a été faitCependant, une erreur dans le
httpd.conf
fichier signifiait qu'apache n'avait pas été démarré, bien que cela n'ait pas été signalé via laapachectl
commande.Launchd a décidé d'écouter sur le port 80 car il pensait qu'Apache était opérationnel.
Mais le contenu de toute requête HTTP entraînait une fermeture immédiate de la connexion.
sudo lsof -i :80
pas de réponsesudo netstat -an | grep LISTEN
n'a donné aucune réponse pour le port 80À ce que je sache, aucun outil de diagnostic n'indiquait que le port 80 était utilisé ou en cours d'écoute.
la correction du fichier httpd.conf d'apache et le redémarrage correct d'apache afin que httpd se trouve dans la table ps, a conduit les demandes HTTP à aboutir.
Je me suis donc trompé sur le fait que je ne pouvais pas exécuter Apache car il y avait déjà quelque chose à l'écoute sur le port 80, plutôt qu'apache conf était lui-même la cause
la source
Je viens de rencontrer le même problème avec les antivirus OSX El Capitan et Avast.
sudo lsof -i ':80'
a montré une connexion à avast.com.j'ai dû
/Applications/Uninstall Avast.app
sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
pour l'empêcher d'utiliser le port 80.
la source