it-swarm.com.de

Wer hört einen bestimmten TCP Port unter Mac OS X ab?

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?

1208
pts

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.

1802
pts

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.

502

Sie können auch verwenden:

Sudo lsof -i -n -P | grep TCP

Dies funktioniert in Mavericks.

424
Rog182

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:

enter image description here

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)
274
arcseldon

Dies funktioniert in Mavericks (OSX 10.9.2).

Sudo lsof -nP -iTCP:$PORT -sTCP:LISTEN
79
Charley Wu

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

39
Sean Hamilton

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

34
PYK

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:

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

32
johntellsall

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.

18
arturgrigor

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.

12
Brent Self

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.

11
edib
lsof -n -i | awk '{ print $1,$9; }' | sort -u

Hier wird angezeigt, wer was tut. Entfernen Sie -n, um Hostnamen anzuzeigen (etwas langsamer).

7

Das hat getan, was ich brauchte.

ps -eaf | grep `lsof -t -i:$PORT`
3
Frank

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! ;-)

1
0x00

Dies ist ein guter Weg unter macOS High Sierra:

netstat -an |grep -i listen
0
tr4nc3

Inspiriert vom User Brent Self:

lsof -i 4 -a | grep LISTEN

0
Punnerud

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.

0
Boschko