Wer überwacht einen bestimmten TCP-Port unter Mac OS X?
1382
Unter Linux kann ich verwenden netstat -pntl | grep $PORToder fuser -n tcp $PORTherausfinden, welcher Prozess (PID) den angegebenen TCP-Port überwacht. Wie erhalte ich dieselben Informationen unter Mac OS X?
Ersetzen Sie $PORTdurch die Portnummer oder eine durch Kommas getrennte Liste von Portnummern.
Stellen Sie vor sudo(gefolgt von einem Leerzeichen), wenn Sie Informationen zu Ports unter # 1024 benötigen.
Das -nFlag dient zur Anzeige von IP-Adressen anstelle von Hostnamen. Dadurch wird der Befehl viel schneller ausgeführt, da die DNS-Suche zum Abrufen der Hostnamen langsam sein kann (einige Sekunden oder eine Minute für viele Hosts).
Die -PFlagge ist für die Anzeige von RAW - Port - Nummern statt aufgelöste Namen wie http, ftpoder eher esoterische Service - Namen wie dpserve, socalia.
Weitere Optionen finden Sie in den Kommentaren.
Der Vollständigkeit halber, weil häufig zusammen verwendet:
Stellen Sie dies voran sudo, um Prozesse anzuzeigen , die Sie nicht besitzen.
Gordon Davisson
30
auf Löwe, arbeitete mit einer Änderungsudo lsof -i TCP:$PORT | grep LISTEN
Dhaval
58
Auf Mountain Lion brauchen Sie nicht grep:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Siu Ching Pong -Asuka Kenji-
16
Nach so vielen Suchen ist dieser der beste. Personen, die den Befehl direkt kopieren möchten, sollten $ PORT durch die tatsächliche Portnummer ersetzen oder die Variable PORT definieren, und dies auch für mehrere Ports wie: export PORT = 8080,4433; lsof -n -i4TCP: $ PORT
siddhusingh
2
Man braucht kein Sudo, wenn der zu untersuchende Hafen über 1024 liegt.
stigkj
626
Seit Snow Leopard (10.6) bis Mojave (10.14) und Catalina (10,15) unterstützt jede Version von macOS Folgendes:
sudo lsof -iTCP -sTCP:LISTEN -n -P
Persönlich habe ich diese einfache Funktion in meinem ~/.bash_profile:
listening() {
if [ $# -eq 0 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P
elif [ $# -eq 1 ]; then
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep -i --color $1
else
echo "Usage: listening [pattern]"
fi
}
Der listeningBefehl gibt Ihnen eine Liste der Prozesse, die einen Port listening smthabhören, und sucht nach einem bestimmten Muster.
Wenn Sie dies haben, ist es ziemlich einfach, nach einem bestimmten Prozess zu fragen listening dropbox, z listening 22. B. nach einem Port, z .
lsofBefehl hat einige spezielle Optionen, um nach Port, Protokoll, Prozess usw. zu fragen, aber ich persönlich fand die obige Funktion viel praktischer, da ich mich nicht an all diese Optionen auf niedriger Ebene erinnern muss. lsofist ein ziemlich mächtiges Werkzeug, aber leider nicht so bequem zu bedienen.
Das geht in meine Punktedateien. Ich suche alle paar Monate und finde immer diese Antwort.
Danemacmillan
1
Ich bin der Meinung, dass dies als Antwort akzeptiert werden sollte, wie OP sagte -pntl, was alle Dienste auflisten würde. In der akzeptierten Antwort werden eine oder mehrere Portnummern angegeben, die nicht im entferntesten identisch sind.
Das ist toll. Ich ziehe es vor zu wissen, was da ist, bevor ich es töte, also habe ich (basierend darauf) gerade zu meinem bashrc hinzugefügt : whatsonport() { ps -ef | grep `lsof -t -i :$1` }, also:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
Sigfried
1
Danke, lsof -i :PORT_NUMBERhabe einen Job für mich gemacht.
Oder wenn Sie nur eine kompakte Zusammenfassung wünschen [kein Dienst / keine Apps beschrieben], gehen Sie zu NETSTAT. Die gute Seite hier ist, dass kein Sudo benötigt wird
netstat -a -n | grep 'LISTEN '
Erläutern der verwendeten Elemente:
-n unterdrückt den Hostnamen
-i für IPv4- und IPv6-Protokolle
-P Portnamen weglassen
-a [über netstat] für alle Sockets
-n [über netstat] löst keine Namen auf, zeigt Netzwerkadressen als Zahlen an
Getestet auf High Sierra 10.13.3 und Mojave 10.14.3
Die letzte Syntax netstat funktioniert auch unter Linux
Sie müssen auch hinzufügen grep LISTEN, um nur die Listener anzuzeigen.
Punkte
3
Das habe ich gebraucht! lsofkonnte den Hafen nicht finden. aber netstatzeigte, dass es offen war. -vwar die geheime Sauce, die mir fehlte.
Aaron McMillin
32
Unter macOS können Sie auf einfache Weise die Prozess-ID abrufen , die einen bestimmten Port mit netstat überwacht . In diesem Beispiel wird nach einem Prozess gesucht, der Inhalte auf Port 80 bereitstellt:
Suchen Sie den Server, der auf Port 80 ausgeführt wird
netstat -anv | egrep -w [.]80.*LISTEN
Beispielausgabe
tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0
Die 2. aus der letzten Spalte ist die PID. Oben ist es 715 .
Optionen
-a - Alle Ports anzeigen, einschließlich der von Servern verwendeten
-n- Zahlen anzeigen, keine Namen nachschlagen. Dies macht den Befehl viel schneller
-v - ausführliche Ausgabe, um die Prozess-IDs zu erhalten
-w- Wörter suchen. Andernfalls gibt der Befehl Informationen für die Ports 8000 und 8001 zurück, nicht nur "80".
LISTEN - Geben Sie Informationen nur für Ports im LISTEN-Modus an, dh für Server
In der neuesten macOS-Version können Sie diesen Befehl verwenden:
lsof -nP -i4TCP:$PORT | grep LISTEN
Wenn Sie sich nur schwer merken können, sollten Sie möglicherweise eine bashFunktion erstellen und mit einem freundlicheren Namen wie diesem exportieren
vi ~/.bash_profile
Fügen Sie dann die folgenden Zeilen zu dieser Datei hinzu und speichern Sie sie.
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}
Jetzt können Sie listening_on 80Ihr Terminal eingeben und sehen, welcher Prozess den Port überwacht 80.
Die vorherigen Antworten funktionierten bei Snow Leopard nicht, aber ich habe versucht, 'netstat -nlp' zu verwenden, bis ich die Verwendung von 'lsof' in der Antwort von pts sah.
Ich bin ein Linux-Typ. Unter Linux ist es mit netstat -ltpnoder einer beliebigen Kombination dieser Buchstaben extrem einfach . Aber unter Mac OS X netstat -an | grep LISTENist das am menschlichsten. Andere sind sehr hässlich und bei der Fehlerbehebung nur schwer zu merken.
Ihre Antwort ist nicht schlecht, aber es handelt sich um eine Frage mit mehreren hoch bewerteten und einer akzeptierten Antwort von vor mehreren Jahren. Versuchen Sie in Zukunft, sich auf neuere Fragen zu konzentrieren, insbesondere auf Fragen, die noch nicht beantwortet wurden.
Zeigt dieser Befehl auch Nicht-TCP-Ports und Nicht-Listener an? In der Frage werden explizit nur Listener an TCP-Ports abgefragt.
Punkte
If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
Gemäß
@ Mischa Tavkhelidze: Es werden also auch Nicht-Hörer angezeigt, sodass die Frage nicht beantwortet wird.
Ich habe ein kleines Skript erstellt, um nicht nur zu sehen, wer wo zuhört, sondern auch um etablierte Verbindungen und zu welchen Ländern anzuzeigen. Funktioniert unter OSX Siera
Sample output
checking established connections
107.178.244.155 : United States
17.188.136.186 : United States
17.252.76.19 : United States
17.252.76.19 : United States
17.188.136.186 : United States
5.45.62.118 : Netherlands
40.101.42.66 : Ireland
151.101.1.69 : United States
173.194.69.188 : United States
104.25.170.11 : United States
5.45.62.49 : Netherlands
198.252.206.25 : United States
151.101.1.69 : United States
34.198.53.220 : United States
198.252.206.25 : United States
151.101.129.69 : United States
91.225.248.133 : Ireland
216.58.212.234 : United States
displaying listening ports
mysqld TCP *:3306 (LISTEN)
com.avast TCP 127.0.0.1:12080 (LISTEN)
com.avast TCP [::1]:12080 (LISTEN)
com.avast TCP 127.0.0.1:12110 (LISTEN)
com.avast TCP [::1]:12110 (LISTEN)
com.avast TCP 127.0.0.1:12143 (LISTEN)
com.avast TCP [::1]:12143 (LISTEN)
com.avast TCP 127.0.0.1:12995 (LISTEN)
com.avast [::1]:12995 (LISTEN)
com.avast 127.0.0.1:12993 (LISTEN)
com.avast [::1]:12993 (LISTEN)
Google TCP 127.0.0.1:34013 (LISTEN)
Dies kann nützlich sein, um zu überprüfen, ob Sie mit Nordkorea verbunden sind! ;-);
Für macOS verwende ich zwei Befehle zusammen, um Informationen zu den Prozessen anzuzeigen, die auf dem Computer abhören und die Verbindung zu Remote-Servern herstellen. Mit anderen Worten, um die Überwachungsports und die aktuellen (TCP) Verbindungen auf einem Host zu überprüfen, können Sie die beiden folgenden Befehle zusammen verwenden
1. netstat -p tcp -p udp
2. lsof -n -i4TCP -i4UDP
Ich dachte, ich würde meinen Input hinzufügen, hoffentlich kann er jemandem helfen.
netstat -p tcp | grep $PORT
hat PIDs nicht angezeigt werden, da netstat auf dem Mac OS X nicht PIDs anzeigen kann.netstat -anv
zeigt den Port unter Mac OS X an (Quelle: Lösung unten von @SeanHamiliton)Antworten:
Verwenden Sie unter macOS High Sierra und höher diesen Befehl:
oder um nur IPv4 zu sehen:
Verwenden Sie in älteren Versionen eines der folgenden Formulare:
Ersetzen Sie
$PORT
durch die Portnummer oder eine durch Kommas getrennte Liste von Portnummern.Stellen Sie vor
sudo
(gefolgt von einem Leerzeichen), wenn Sie Informationen zu Ports unter # 1024 benötigen.Das
-n
Flag dient zur Anzeige von IP-Adressen anstelle von Hostnamen. Dadurch wird der Befehl viel schneller ausgeführt, da die DNS-Suche zum Abrufen der Hostnamen langsam sein kann (einige Sekunden oder eine Minute für viele Hosts).Die
-P
Flagge ist für die Anzeige von RAW - Port - Nummern statt aufgelöste Namen wiehttp
,ftp
oder eher esoterische Service - Namen wiedpserve
,socalia
.Weitere Optionen finden Sie in den Kommentaren.
Der Vollständigkeit halber, weil häufig zusammen verwendet:
So töten Sie die PID:
quelle
sudo
, um Prozesse anzuzeigen , die Sie nicht besitzen.sudo lsof -i TCP:$PORT | grep LISTEN
grep
:sudo lsof -iTCP:$PORT -sTCP:LISTEN
Seit Snow Leopard (10.6) bis Mojave (10.14) und Catalina (10,15) unterstützt jede Version von macOS Folgendes:
sudo lsof -iTCP -sTCP:LISTEN -n -P
Persönlich habe ich diese einfache Funktion in meinem
~/.bash_profile
:Der
listening
Befehl gibt Ihnen eine Liste der Prozesse, die einen Portlistening smth
abhören, und sucht nach einem bestimmten Muster.Wenn Sie dies haben, ist es ziemlich einfach, nach einem bestimmten Prozess zu fragen
listening dropbox
, zlistening 22
. B. nach einem Port, z .lsof
Befehl hat einige spezielle Optionen, um nach Port, Protokoll, Prozess usw. zu fragen, aber ich persönlich fand die obige Funktion viel praktischer, da ich mich nicht an all diese Optionen auf niedriger Ebene erinnern muss.lsof
ist ein ziemlich mächtiges Werkzeug, aber leider nicht so bequem zu bedienen.quelle
-pntl
, was alle Dienste auflisten würde. In der akzeptierten Antwort werden eine oder mehrere Portnummern angegeben, die nicht im entferntesten identisch sind.Sie können auch verwenden:
Dies funktioniert in Mavericks.
quelle
-i
Option macht es deutlich schneller. 0,02 Sekunden gegenüber 2 Sekunden. In meiner Bewerbung machte dies einen großen Unterschied.Update Januar 2016
Wirklich überrascht, dass niemand vorgeschlagen hat:
um die grundlegenden Informationen zu erhalten. Überprüfen Sie beispielsweise Port 1337:
Andere Variationen, abhängig von den Umständen:
Darauf können Sie problemlos aufbauen, um die PID selbst zu extrahieren. Zum Beispiel:
Dies entspricht auch (im Ergebnis) diesem Befehl:
Schnelle Illustration:
Der Vollständigkeit halber, weil häufig zusammen verwendet:
So töten Sie die PID:
oder als Einzeiler:
quelle
lsof -t -i :1338
.-t
gibt die Prozess-ID zurück, sodass Sie nicht awk / head müssen.kill -9 $(lsof -t -i :5000)
auf el capitanwhatsonport() { ps -ef | grep `lsof -t -i :$1` }
, also:⇒ whatsonport 3000 --> 501 14866 14865 0 6:07AM ttys006 0:01.73 node .
lsof -i :PORT_NUMBER
habe einen Job für mich gemacht.Dies funktioniert in Mavericks (OSX 10.9.2).
quelle
Für die Ports LISTEN, ESTABLISHED und CLOSED
Nur für die LISTEN-Ports
Für einen bestimmten LISTEN-Port, z. B.: Port 80
Oder wenn Sie nur eine kompakte Zusammenfassung wünschen [kein Dienst / keine Apps beschrieben], gehen Sie zu NETSTAT. Die gute Seite hier ist, dass kein Sudo benötigt wird
Erläutern der verwendeten Elemente:
-n unterdrückt den Hostnamen
-i für IPv4- und IPv6-Protokolle
-P Portnamen weglassen
-a [über netstat] für alle Sockets
-n [über netstat] löst keine Namen auf, zeigt Netzwerkadressen als Zahlen an
quelle
Unter OS X können Sie die Option -v für netstat verwenden, um die zugehörige PID anzugeben.
Art:
Die Ausgabe sieht folgendermaßen aus:
Die PID ist die Nummer vor der letzten Spalte, in diesem Fall 3105
quelle
grep LISTEN
, um nur die Listener anzuzeigen.lsof
konnte den Hafen nicht finden. abernetstat
zeigte, dass es offen war.-v
war die geheime Sauce, die mir fehlte.Unter macOS können Sie auf einfache Weise die Prozess-ID abrufen , die einen bestimmten Port mit netstat überwacht . In diesem Beispiel wird nach einem Prozess gesucht, der Inhalte auf Port 80 bereitstellt:
Suchen Sie den Server, der auf Port 80 ausgeführt wird
Beispielausgabe
Die 2. aus der letzten Spalte ist die PID. Oben ist es 715 .
Optionen
-a
- Alle Ports anzeigen, einschließlich der von Servern verwendeten-n
- Zahlen anzeigen, keine Namen nachschlagen. Dies macht den Befehl viel schneller-v
- ausführliche Ausgabe, um die Prozess-IDs zu erhalten-w
- Wörter suchen. Andernfalls gibt der Befehl Informationen für die Ports 8000 und 8001 zurück, nicht nur "80".LISTEN
- Geben Sie Informationen nur für Ports im LISTEN-Modus an, dh für Serverquelle
In der neuesten macOS-Version können Sie diesen Befehl verwenden:
Wenn Sie sich nur schwer merken können, sollten Sie möglicherweise eine
bash
Funktion erstellen und mit einem freundlicheren Namen wie diesem exportierenFügen Sie dann die folgenden Zeilen zu dieser Datei hinzu und speichern Sie sie.
Jetzt können Sie
listening_on 80
Ihr Terminal eingeben und sehen, welcher Prozess den Port überwacht80
.quelle
Auf Snow Leopard (OS X 10.6.8) ergibt das Ausführen von "man lsof":
(Die tatsächliche manuelle Eingabe lautet 'lsof -i 4 -a -p 1234')
Die vorherigen Antworten funktionierten bei Snow Leopard nicht, aber ich habe versucht, 'netstat -nlp' zu verwenden, bis ich die Verwendung von 'lsof' in der Antwort von pts sah.
quelle
Ich bin ein Linux-Typ. Unter Linux ist es mit
netstat -ltpn
oder einer beliebigen Kombination dieser Buchstaben extrem einfach . Aber unter Mac OS Xnetstat -an | grep LISTEN
ist das am menschlichsten. Andere sind sehr hässlich und bei der Fehlerbehebung nur schwer zu merken.quelle
Dies zeigt an, wer was tut. Entfernen Sie -n, um Hostnamen anzuzeigen (etwas langsamer).
quelle
If no address is specified, this option [-i] selects the listing of all Internet and x.25 (HP-UX) network files.
-sTCP:LISTEN
zulsof
Das hat getan, was ich brauchte.
quelle
Ich habe ein kleines Skript erstellt, um nicht nur zu sehen, wer wo zuhört, sondern auch um etablierte Verbindungen und zu welchen Ländern anzuzeigen. Funktioniert unter OSX Siera
Dies kann nützlich sein, um zu überprüfen, ob Sie mit Nordkorea verbunden sind! ;-);
quelle
Dies ist ein guter Weg unter macOS High Sierra:
quelle
Inspiriert vom Benutzer Brent Self:
lsof -i 4 -a | grep LISTEN
quelle
Für macOS verwende ich zwei Befehle zusammen, um Informationen zu den Prozessen anzuzeigen, die auf dem Computer abhören und die Verbindung zu Remote-Servern herstellen. Mit anderen Worten, um die Überwachungsports und die aktuellen (TCP) Verbindungen auf einem Host zu überprüfen, können Sie die beiden folgenden Befehle zusammen verwenden
Ich dachte, ich würde meinen Input hinzufügen, hoffentlich kann er jemandem helfen.
quelle