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?
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?
Antworten:
Sie können ss
aus 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.
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
Mir ist kein Weg mit iproute2
Werkzeugen 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.
Sie können netstat
dies 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
netstat
iproute2 nicht mehr weiterentwickelt wird, und ich versuche, dies zu vermeiden.
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 .
Eine andere Methode, lsof
wenn Sie nicht die PID kennen, sondern nur den Namen des Programms:
lsof -Pa -p $(pgrep [programName]) -i
lsof
4.89 auf Ubuntu 16.04
pgrep <program name>
Wählen Sie dann die PID, die Sie für den obigen Befehl benötigen. Ersetzen $(pgrep [programName])
durch die PID #
ss
gibt es keine PID-Filterung außer für Netlink-Sockets.