Ports auflisten, die eine Prozess-PID abhört (vorzugsweise mit iproute2-Tools)?

68

Ich möchte alle Ports auflisten, die eine PID derzeit abhört.

Wie würden Sie mir empfehlen, diese Art von Daten über einen Prozess zu erhalten?

ThorSummoner
quelle
Seltsamerweise ssgibt es keine PID-Filterung außer für Netlink-Sockets.
Poige

Antworten:

56

Sie können ssaus dem iproute2-Paket (das ähnlich ist netstat) Folgendes verwenden :

ss -l -p -n | grep "pid=1234,"

oder (für ältere iproute2 Version):

ss -l -p -n | grep ",1234,"

Ersetzen Sie 1234 durch die PID des Programms.

Jofel
quelle
3
Es gibt auch -uoder nur -tfür udb oder tcp. : +1: Und diese können alle wie ss -tlnpss -tlnp | cat
folgt
1
Ich habe es mir zur Gewohnheit gemacht ss -nlp | cat, zeigen Sie mir in groben Zügen die Abhörprozesse (-l), ihre Portnummern (-n) und ihre Prozessinformationen (-p) und versuchen Sie nicht, die Ausgabe an meine Shell anzupassen | cat( oder weniger oder was auch immer). Ich habe nur zwei Jahre gebraucht, um mich daran zu gewöhnen: D
ThorSummoner
Hat bei mir nicht funktioniert (unter Debian 9). Dort müssen Sie nach ", pid = 1234,"
ofrommel
@ofrommel danke für den Hinweis - ich habe die Antwort angepasst.
Jofel
Auch dies funktioniert nur mit root-Berechtigungen :)
ofrommel
56

Mir ist kein Weg mit iproute2Werkzeugen bekannt. Aber als Workaround können Sie dies ausprobieren.

lsof -Pan -p PID -i

sollte Ihnen die Informationen geben, die Sie suchen.


Ausgabe

lsof -Pan -p 27808 -i
COMMAND   PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
httpd   27808 apache    5u  IPv6 112811294      0t0  TCP *:80 (LISTEN)
httpd   27808 apache    7u  IPv6 112811298      0t0  TCP *:8443 (LISTEN)
httpd   27808 apache    9u  IPv6 112811303      0t0  TCP *:443 (LISTEN)

Ich habe diesen Befehl von hier erhalten , bin mir aber nicht sicher, welchen Link ich genau habe, da ich alle im Notizbuch vermerkt habe. Aber Sie könnten auch von dort aus nachsehen.

Ramesh
quelle
13

Sie können netstatdies verwenden, um die PID jedes Hörvorgangs zu ermitteln.

netstat - Druckt Netzwerkverbindungen, Routingtabellen, Schnittstellenstatistiken, Maskeradeverbindungen und Multicast-Mitgliedschaften

-a, --all Zeigt sowohl empfangende als auch nicht empfangende Sockets an (für TCP bedeutet dies, dass Verbindungen hergestellt wurden). Zeigen Sie mit der Option --interfaces Schnittstellen an, die nicht markiert sind

--numeric, -n Zeigt numerische Adressen an, anstatt zu versuchen, symbolische Host-, Port- oder Benutzernamen zu ermitteln.

-p, --program Zeigt die PID und den Namen des Programms an, zu dem jeder Socket gehört.

Hier ist ein Beispiel:

# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1507/rpcbind
tcp        0      0 0.0.0.0:51188               0.0.0.0:*                   LISTEN      1651/rpc.statd
tcp        0      0 0.0.0.0:1013                0.0.0.0:*                   LISTEN      1680/ypbind
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1975/sshd
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1763/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2081/master
tcp        0      0 127.0.0.1:27017             0.0.0.0:*                   LISTEN      2119/mongod
tcp        0     48 172.16.33.73:22             172.16.127.110:51850        ESTABLISHED 25473/sshd
tcp        0      0 172.16.33.73:22             172.16.127.110:51214        ESTABLISHED 24699/sshd
tcp        0      0 :::111                      :::*                        LISTEN      1507/rpcbind
tcp        0      0 :::9200                     :::*                        LISTEN      1994/java
tcp        0      0 :::9300                     :::*                        LISTEN      1994/java
tcp        0      0 :::22                       :::*                        LISTEN      1975/sshd
tcp        0      0 ::1:631                     :::*                        LISTEN      1763/cupsd
tcp        0      0 ::1:25                      :::*                        LISTEN      2081/master
tcp        0      0 :::59162                    :::*                        LISTEN      1651/rpc.statd
Raza
quelle
1
Vielen Dank, obwohl ich darüber informiert wurde, dass netstatiproute2 nicht mehr weiterentwickelt wird, und ich versuche, dies zu vermeiden.
ThorSummoner
12

Die Antwort von @jofel zeigt Ihnen, welches Tool Sie verwenden müssen ss. Hier ist der Ersatz für die anderen Netzwerk-Tools in iproute2.

Die veralteten Befehle und ihre iproute2-Entsprechungen lauten wie folgt:

deprecated      replacement(s)
==========      ==============
- arp           ip n (ip neighbor)
- ifconfig      ip a (ip addr), ip link, ip -s (ip -stats)
- iptunnel      ip tunnel
- iwconfig      iw
- nameif        ip link, ifrename
- netstat       ss, ip route (for netstat-r), ip -s link (for netstat -i), 
                ip maddr (for netstat-g)

- route         ip r (ip route)

Die Grundliste finden Sie auch hier auf Wikipedia: http://en.wikipedia.org/wiki/Iproute2 .

Verweise

slm
quelle
1

Eine andere Methode, lsofwenn Sie nicht die PID kennen, sondern nur den Namen des Programms:

lsof -Pa -p $(pgrep [programName]) -i
Cryptoboy
quelle
funktioniert nicht mit lsof4.89 auf Ubuntu 16.04
Palik
1
Dies ist der Fall, wenn das Programm mehrere Prozesse erzeugt hat. In diesem Fall müssen Sie die spezifische PID angeben, wenn Sie den von mir angegebenen Befehl lsof ausführen. pgrep <program name>Wählen Sie dann die PID, die Sie für den obigen Befehl benötigen. Ersetzen $(pgrep [programName])durch die PID #
Cryptoboy
0

Hast du es versucht, macht das auch gleich

netstat -plnt | grep 27071

Erfolg

Der Exorzist
quelle