web-dev-qa-db-fra.com

Aucune idée de ce que vous écoutez sur le port 80 sous OS X

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?

34
geoff

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.

45
Daniel Beck

Juste pour que la réponse soit claire au cas où les utilisateurs le rechercheraient.

  1. 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.

  2. Sudo apachectl start a été fait

  3. 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.

  4. Launchd a décidé d'écouter sur le port 80 car il pensait qu'Apache était opérationnel.

  5. Mais le contenu de toute requête HTTP entraînait une fermeture immédiate de la connexion.

  6. Sudo lsof -i :80 n'a donné aucune réponse

  7. Sudo netstat -an | grep LISTEN n'a donné aucune réponse pour le port 80

  8. à ce que je sache, aucun outil de diagnostic ne contenait d'informations indiquant que le port 80 était utilisé ou en cours d'écoute.

  9. 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.

  10. 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

7
geoff

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û

  1. désinstaller Avast avec /Applications/Uninstall Avast.app
  2. Sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
  3. redémarrer

pour l'empêcher d'utiliser le port 80.

0
spyle