Keine Ahnung, was auf Port 80 in OS X zu hören ist

34

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 Regel für die Weiterleitung von Paketen sein? Dh Pakete werden vom eingehenden Port 80 an etwas anderes weitergeleitet, das 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?

Geoff
quelle
Keine direkte Antwort auf Ihre interessante Frage, aber: Was ist, wenn Sie Ihren Browser auf http: // localhost verweisen ?
Arjan
Das lsofGrep, das du benutzt hast, würde leer zurückkommen. Portnummern werden /etc/servicesNamen zugeordnet. Versuchen Sie lsof -i | grep http...
Nevin Williams
1
Tatsächlich ist die Zuordnung von / etc / services kein Problem, wenn Sie das -i :portFormat verwenden, sondern nur, wenn Sie grep verwenden. Was ein Problem sein wird, ist, dass lsofRoot-Privilegien benötigt werden, um die Prozesse anderer Benutzer zu sehen, so dass Sie verwenden sollten sudo lsof -i :80(und ich würde es ohne das versuchen grep, nur um sicherzugehen ...)
Gordon Davisson
1
Hallo zusammen, danke für die Vorschläge, aber es ist noch nichts aufgetaucht - auch als root und ohne greps ist nichts aufgeführt, was Port 80 tatsächlich anhört.
Geoff,
Haben Sie versucht, lsof -i :80in dieser Telnet-Sitzung noch eine Verbindung herzustellen? Und abgesehen von dem Versuch, http: // localhost / zu verwenden , zeigt die Eingabe an dieser Telnet-Eingabeaufforderung möglicherweise etwas ...? (Auch hier weiß ich: Selbst wenn Sie es so herausfinden, wäre es nicht die Antwort auf Ihre Frage ...)
Arjan

Antworten:

45

Sie müssen diese Befehle ausführen root, um die Prozesse anderer Benutzer anzuzeigen. Beispiel:

sudo lsof -i ':80'

Mac OS X enthält einen Apache-Webserver, der mit apachectlas gesteuert werden kann root. Es wird normalerweise über gestartet launchd, die entsprechende Konfigurationsdatei ist /System/Library/LaunchAgents/org.apache.httpd.plist. Wenn es nicht dieser Apache ist, der auf Port 80 läuft, wird er wahrscheinlich gestartet , 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, verfolgt launchd diesen und stellt sicher, dass er bei Bedarf ausgeführt wird.

Daniel Beck
quelle
Dann denke ich, dass meine Idee richtig war und sudo lsof -i ':80' möglicherweise nicht wirklich etwas zurückgibt, es sei denn, man führt das aus, während eine Verbindung in der Telnet-Sitzung besteht? Aber auch ohne diese Befehle hätte http: // localhost / wahrscheinlich noch eine Apache-Begrüßungsseite angezeigt?
Arjan
(Ich glaube, Ihre Antwort ist wahrscheinlich die Lösung; sie stimmt einfach nicht mit allen Kommentaren des OP überein.)
Arjan,
1
Danke für diese geniale Antwort. Ich habe es jetzt geschafft, es zu lösen: 1. Es gab einen Fehler in httpd.conf, also startete sudo apachectl nicht Apache. 2. launchd hat jedoch Port 80 abgehört und war bereit, Anforderungen an einen nicht vorhandenen Server weiterzuleiten. 3. Allerdings hat launchd nicht im herkömmlichen Sinne zugehört - das heißt - die Ergebnisse von sudo lsof -i: 80 waren ebenfalls für netstat leer. 4. Ich denke, launchd mag etwas wie xinetd, da es nicht offiziell zuhört ein Port, aber irgendwie gelingt es, Verbindungen zum Port durch Bestechen des Kernels zu ermöglichen.
Geoff
2
Für mich lief das Problem sudo apachectl stopim Terminal.
MikeiLL
Das hat nicht funktioniert für mich, aber diese Version hat zeigen , was ausgeführt wurde (OS High Sierra 10.13.6) sudo lsof -i -P | grep -i "80"von superuser.com/questions/984919/...
RoboBear
7

Nur um die tatsächliche Antwort zu verdeutlichen, falls Benutzer danach suchen.

  1. launchd scannt den /System/Library/LaunchDaemons/On Boot und erkennt, org.apache.httpd.plistdass Apache beim Start Port 80 darauf weiterleiten muss.

  2. sudo apachectl start geschah

  3. Es gab jedoch einen Fehler in der httpd.confDatei, der bedeutete, dass Apache nicht gestartet wurde, obwohl dies nicht über den apachectlBefehl gemeldet wurde .

  4. Launchd entschied sich, Port 80 abzuhören, da er dachte, Apache sei aktiv.

  5. Der Inhalt einer HTTP-Anfrage führte jedoch dazu, dass die Verbindung sofort geschlossen wurde.

  6. sudo lsof -i :80 gab keine Antworten

  7. sudo netstat -an | grep LISTEN gab keine Antworten für Port 80

  8. Soweit ich in Diagnosetools nachvollziehen konnte, gab es keine Informationen, die zeigten, dass Port 80 verwendet wurde oder überwacht wurde.

  9. Das Reparieren der httpd.conf von Apache und das erfolgreiche Neustarten von Apache, sodass httpd in der ps-Tabelle enthalten war, führte dazu, dass HTTP-Anforderungen erfolgreich waren.

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

Geoff
quelle
Also, was war los mit httpd.conf? Ich habe jetzt dieses Problem und bin mir nicht sicher, wie ich aufgrund Ihrer Antwort hier vorgehen soll.
Drew Angell
0

Ich bin gerade auf dasselbe Problem mit OSX El Capitan und Avast Antivirus gestoßen. sudo lsof -i ':80'zeigte eine Verbindung zu 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)

Ich musste

  1. deinstalliere Avast mit /Applications/Uninstall Avast.app
  2. sudo rm -rf "/Library/Application Support/Avast" "/Applications/Avast Business Security.app" "/Applications/Uninstall Avast.app"
  3. Neustart

um zu verhindern, dass Port 80 verwendet wird.

spyle
quelle