Unter Linux kann ich netstat -pntl | grep $PORT
oder fuser -n tcp $PORT
verwenden, um herauszufinden, welcher Prozess (PID) den angegebenen TCP Port überwacht. Wie erhalte ich die gleichen Informationen unter Mac OS X?
Verwenden Sie unter macOS High Sierra den folgenden Befehl:
lsof -nP -i4TCP:$PORT | grep LISTEN
Verwenden Sie in älteren Versionen eines der folgenden Formulare:
lsof -nP -iTCP:$PORT | grep LISTEN
lsof -nP -i:$PORT | grep LISTEN
Ersetzen Sie $PORT
durch die Portnummer oder eine durch Kommas getrennte Liste von Portnummern.
Stellen Sie Sudo
(gefolgt von einem Leerzeichen) voran, wenn Sie Informationen zu Ports unter # 1024 benötigen.
Das -n
-Flag dient zum Anzeigen von IP-Adressen anstelle von Hostnamen. Dadurch wird der Befehl viel schneller ausgeführt, da DNS-Suchvorgänge zum Abrufen der Hostnamen langsam sein können (mehrere Sekunden oder eine Minute für viele Hosts).
Das -P
-Flag dient zum Anzeigen von unformatierten Portnummern anstelle von aufgelösten Namen wie http
, ftp
oder mehr esoterischen Dienstnamen wie dpserve
, socalia
.
Weitere Optionen finden Sie in den Kommentaren.
Seit Snow Leopard (10.6), bis Mojave (10.14) 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
}
Dann gibt der Befehl listening
eine Auflistung der Prozesse, die an einem Port empfangsbereit sind, und listening smth
überprüft dies auf ein bestimmtes Muster.
Wenn dies der Fall ist, ist es ziemlich einfach, nach einem bestimmten Prozess zu fragen, z. listening dropbox
oder Port, z.B. listening 22
.
Der Befehl lsof
verfügt über einige spezielle Optionen zum Abfragen von Ports, Protokollen, Prozessen usw., aber ich persönlich habe die oben beschriebene Funktion als viel praktischer empfunden, da ich mich nicht an alle diese Optionen auf niedriger Ebene erinnern muss. lsof
ist ein ziemlich mächtiges Werkzeug, das aber leider nicht so bequem zu bedienen ist.
Sie können auch verwenden:
Sudo lsof -i -n -P | grep TCP
Dies funktioniert in Mavericks.
Update Januar 2016
Wirklich überrascht, dass niemand vorgeschlagen hat:
lsof -i :PORT_NUMBER
um die grundlegenden Informationen zu erhalten. Überprüfen Sie beispielsweise Port 1337:
lsof -i :1337
Andere Variationen, abhängig von den Umständen:
Sudo lsof -i :1337
lsof -i tcp:1337
Darauf können Sie einfach aufbauen, um die PID selbst zu extrahieren. Zum Beispiel:
lsof -t -i :1337
das ist auch äquivalent (im Ergebnis) zu diesem Befehl:
lsof -i :1337 | awk '{ print $2; }' | head -n 2 | grep -v PID
Schnelle Illustration:
Der Vollständigkeit halber, da häufig zusammen verwendet:
So töten Sie die PID:
kill -9 <PID>
# kill -9 60401
oder als Einzeiler:
kill -9 $(lsof -t -i :1337)
Dies funktioniert in Mavericks (OSX 10.9.2).
Sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
unter OS X können Sie die Option -v für netstat verwenden, um die zugehörige PID anzugeben.
art:
netstat -anv | grep [.]PORT
die Ausgabe sieht folgendermaßen aus:
tcp46 0 0 *.8080 *.* LISTEN 131072 131072 3105 0
Die PID ist die Nummer vor der letzten Spalte, 3105 für diesen Fall
Für die Ports LISTEN, ESTABLISHED und CLOSED
Sudo lsof -n -i -P | grep TCP
Nur für die LISTEN-Ports
Sudo lsof -n -i -P | grep LISTEN
Beispiel: Port 80 für einen bestimmten LISTEN-Port
Sudo lsof -n -i -P | grep ':80 (LISTEN)'
Oder wenn Sie nur eine kompakte Zusammenfassung wünschen [kein Service/Apps beschrieben], gehen Sie zu NETSTAT. Die gute Seite hier ist kein Sudo nötig
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 [over netstat] für alle Sockets
- n [over netstat] Namen nicht auflösen, Netzwerkadressen als Zahlen anzeigen
Getestet am High Sierra 10.13.3 und Mojave 10.14.3
die letzte Syntax netstat funktioniert auch unter Linux
lsof Sie können Debian-basiert ausprobieren: apt-get install lsof
Unter macOS können Sie mit netstat auf einfache Weise die Prozess-ID ermitteln, die einen bestimmten Port überwacht. In diesem Beispiel wird nach einem Prozess gesucht, der Inhalte auf Port 80 bereitstellt:
netstat -anv | egrep -w [.]80.*LISTEN
tcp4 0 0 *.80 *.* LISTEN 131072 131072 715 0
Die 2. aus der letzten Spalte ist die PID. Oben ist es 715.
-a
- Zeigt alle Ports an, einschließlich der von Servern verwendeten
-n
- Zahlen anzeigen, Namen nicht nachschlagen. Dies macht den Befehl viel schneller
-v
- Ausführliche Ausgabe, um die Prozess-IDs abzurufen
-w
- Suchwörter. 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, d. H. Für Server
In der neuesten MacOS-Version können Sie diesen Befehl verwenden:
lsof -nP -i4TCP:$PORT | grep LISTEN
Wenn es Ihnen schwer fällt, sich zu erinnern, sollten Sie vielleicht eine bash
-Funktion erstellen und sie mit einem ähnlicheren Namen exportieren
vi ~/.bash_profile
fügen Sie dieser Datei die folgenden Zeilen hinzu, und speichern Sie sie.
function listening_on() {
lsof -nP -i4TCP:"$1" | grep LISTEN
}
Jetzt können Sie listening_on 80
in Ihr Terminal eingeben und sehen, welcher Prozess den Port 80
überwacht.
Unter Snow Leopard (OS X 10.6.8) bietet das Ausführen von 'man lsof':
lsof -i 4 -a
(aktueller manueller Eintrag ist 'lsof -i 4 -a -p 1234')
Die vorherigen Antworten funktionierten auf 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 -ltpn
oder einer beliebigen Kombination dieser Buchstaben extrem einfach. Aber in Mac OS X ist netstat -an | grep LISTEN
am humansten. Andere sind sehr hässlich und bei der Fehlersuche schwer zu merken.
lsof -n -i | awk '{ print $1,$9; }' | sort -u
Hier wird angezeigt, wer was tut. Entfernen Sie -n, um Hostnamen anzuzeigen (etwas langsamer).
Das hat getan, was ich brauchte.
ps -eaf | grep `lsof -t -i:$PORT`
Ich habe ein kleines Skript erstellt, um nicht nur zu sehen, wer wo zuhört, sondern auch bestehende Verbindungen und zu welchen Ländern anzuzeigen. Funktioniert unter OSX Siera
#!/bin/bash
printf "\nchecking established connections\n\n"
for i in $(Sudo lsof -i -n -P | grep TCP | grep ESTABLISHED | grep -v IPv6 |
grep -v 127.0.0.1 | cut -d ">" -f2 | cut -d " " -f1 | cut -d ":" -f1); do
printf "$i : " & curl freegeoip.net/xml/$i -s -S | grep CountryName |
cut -d ">" -f2 | cut -d"<" -f1
done
printf "\ndisplaying listening ports\n\n"
Sudo lsof -i -n -P | grep TCP | grep LISTEN | cut -d " " -f 1,32-35
#EOF
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! ;-)
Dies ist ein guter Weg unter macOS High Sierra:
netstat -an |grep -i listen
Inspiriert vom User Brent Self:
lsof -i 4 -a | grep LISTEN
Unter macOS verwende ich zwei Befehle zusammen, um Informationen zu den Prozessen anzuzeigen, die auf dem Computer abhören, und zu Prozessen, die eine 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
Dachte, ich würde meinen Input hinzufügen, hoffentlich kann es jemandem helfen.