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? C'est à dire. les paquets sont transférés du port entrant 80 vers quelque chose d'autre, 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 bien, des experts en OSX peuvent-ils m'aider à diagnostiquer ce problème?
Vous devez exécuter ces commandes en tant que root
pour afficher les processus des autres utilisateurs, par exemple:
Sudo lsof -i ':80'
Mac OS X comprend un serveur Web Apache pouvant être contrôlé à l'aide de apachectl
en tant que root
. Il est généralement lancé via launchd
, le fichier de configuration correspondant est /System/Library/LaunchAgents/org.Apache.httpd.plist
. Si ce n'est pas cet Apache fonctionnant sur le port 80, il s'agit probablement launchd , de l'implémentation par Apple d'un gestionnaire de démon. Selon Wikipedia :
Lorsque launchd analyse les plists de tâches au démarrage, il réserve et écoute tous les ports demandés par ces tâches. Si la clé "OnDemand" l'indique dans la liste, le démon n'est pas chargé à ce moment-là. Launchd écoutera plutôt sur le port, lancera le démon si nécessaire et l'éteindra s'il ne l'est pas. Après le chargement d’un démon, launchd en assurera le suivi et s’assurera qu’il est en cours d’exécution, le cas échéant.
Juste pour que la réponse soit claire au cas où les utilisateurs le rechercheraient.
launchd analyse le /System/Library/LaunchDaemons/
au démarrage et détermine à partir du org.Apache.httpd.plist
qu'au démarrage d'Apache, il doit lui transférer le port 80.
Sudo apachectl start
a été fait
Cependant, une erreur s'est produite dans le fichier httpd.conf
, ce qui signifie qu'Apache n'a pas été démarré, bien que cela n'ait pas été signalé via la commande apachectl
.
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
n'a donné aucune réponse
Sudo netstat -an | grep LISTEN
n'a donné aucune réponse pour le port 80
à ce que je sache, aucun outil de diagnostic ne contenait d'informations indiquant que le port 80 était utilisé ou en cours d'écoute.
la correction du fichier httpd.conf d’Apache et le redémarrage d’Apache afin que httpd se trouve dans la table ps, a conduit les requêtes HTTP à aboutir.
Je pensais donc 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 était la cause
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.
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)
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.