Ich verwende OSX Mountain Lion 10.8.3 und habe meinen Mac neu gestartet.
Ich möchte einen Dienst starten (wie Apache auf Port 80), aber mit Port 80 ist bereits etwas los:
telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Warten Sie, ich höre Sie sagen, Sie können das mit lsof oder netstat finden. Außer es ist nichts da
netstat -an | grep LISTEN | grep '\.80'
*comes back blank*
lsof -i :80 | grep LISTEN
*comes back blank
Nach dem, was ich über Unix-Systeme weiß, muss dies dann eine Paketweiterleitungsregel sein? Das heißt Pakete werden vom eingehenden Port 80 an eine andere Stelle weitergeleitet, die diesen Dienst abhört.
ipfw show
65535 0 0 allow ip from any to any
Hmm, da ist nichts Ungewöhnliches
pfctl -s nat
No ALTQ support in kernel
ALTQ related functions disabled
Nichts ungewöhnliches da
Meine Frage ist, wie kann ich Regeln für die Weiterleitung von Paketen anzeigen ... Unter Linux kann ich einfach iptables -L -t NAT oder iptables -L ausführen. Oder können mir OSX-Experten bei der Diagnose dieses Problems helfen?
Sie müssen diese Befehle als root
ausführen, um die Prozesse anderer Benutzer anzuzeigen. Beispiel:
Sudo lsof -i ':80'
Mac OS X enthält einen Apache-Webserver, der mit apachectl
als root
gesteuert werden kann. Es wird normalerweise über launchd
gestartet, die entsprechende Konfigurationsdatei lautet /System/Library/LaunchAgents/org.Apache.httpd.plist
. Wenn nicht dieser Apache auf Port 80 läuft, ist es wahrscheinlich launchd , Apples Implementierung eines Daemon-Managers. Laut Wikipedia :
Wenn launchd beim Booten die Joblisten durchsucht, reserviert und überwacht es alle von diesen Jobs angeforderten Ports. Wenn dies in der Liste durch die "OnDemand" -Taste angezeigt wird, wird der Dämon zu diesem Zeitpunkt nicht geladen. Stattdessen überwacht launchd den Port, startet den Dämon bei Bedarf und fährt ihn herunter, wenn dies nicht der Fall ist. Nachdem ein Daemon geladen wurde, wird er von launchd protokolliert und bei Bedarf ausgeführt.
Nur um die eigentliche Antwort zu verdeutlichen, falls Benutzer danach suchen.
launchd scannt den /System/Library/LaunchDaemons/
beim Booten und ermittelt aus dem org.Apache.httpd.plist
, dass er beim Start von Apache Port 80 darauf weiterleiten muss.
Sudo apachectl start
wurde ausgeführt
Es gab jedoch einen Fehler in der httpd.conf
-Datei, der bedeutete, dass Apache nicht gestartet wurde, obwohl dies nicht über den Befehl apachectl
gemeldet wurde.
Launchd beschloss, Port 80 abzuhören, da er dachte, Apache sei aktiv.
Der Inhalt einer HTTP-Anfrage führte jedoch dazu, dass die Verbindung sofort geschlossen wurde.
Sudo lsof -i :80
gab keine Antworten
Sudo netstat -an | grep LISTEN
gab keine Antwort für Port 80
soweit ich in Diagnosetools feststellen konnte, gab es keine Informationen, die zeigten, dass Port 80 verwendet wurde oder überwacht wurde.
das Reparieren der httpd.conf von Apache und der erfolgreiche Neustart von Apache, sodass httpd in der ps-Tabelle enthalten war, führte dazu, dass HTTP-Anforderungen erfolgreich waren.
Ich habe mich daher geirrt, dass ich Apache nicht ausführen konnte, weil auf Port 80 bereits etwas zu hören war, und nicht Apache conf selbst die Ursache war
Ich bin gerade auf dasselbe Problem mit OSX El Capitan und Avast Antivirus gestoßen. Sudo lsof -i ':80'
hat eine Verbindung zu avast.com hergestellt.
[email protected] ~|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)
Ich musste
/Applications/Uninstall Avast.app
Sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
um zu verhindern, dass Port 80 verwendet wird.