Elencare le porte su cui un PID di processo è in ascolto (preferibilmente utilizzando gli strumenti iproute2)?


68

Sto cercando di elencare tutte le porte su cui un PID è attualmente in ascolto.

Come mi consiglieresti di ottenere questo tipo di dati su un processo?


Abbastanza strano ssnon ha alcun filtro su PID ad eccezione dei socket netlink.
poige,

Risposte:


56

Puoi usare ssdal pacchetto iproute2 (che è simile a netstat):

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

oppure (per la versione precedente di iproute2):

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

Sostituisci 1234 con il PID del programma.


3
C'è anche -uo solo -tper udb o tcp. : +1: E tutti questi possono essere impilati in questo modo ss -tlnpss -tlnp | cat
:,

1
Ho preso l'abitudine ss -nlp | cat, è più o meno, mostrami i processi di ascolto (-l), i loro numeri di porta (-n) e le loro informazioni sui processi (-p), e non provo ad adattare l'output alla mia shell | cat( o meno o qualunque altra cosa). Mi ci sono voluti solo due anni per abituarmi: D
ThorSummoner,

Non ha funzionato per me (su Debian 9). Lì devi cercare ", pid = 1234,"
ofrommel

@ofrommel grazie per il suggerimento - ho adattato la risposta.
jofel,

Inoltre, questo funziona solo con i permessi di root :)
ofrommel

57

Non sono a conoscenza di come utilizzare gli iproute2strumenti. Ma come soluzione alternativa, potresti provare questo.

lsof -Pan -p PID -i

dovrebbe darti le informazioni che stai cercando.


Produzione

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)

Ho ricevuto questo comando da qui, ma non sono sicuro del collegamento esatto poiché li ho annotati tutti nel quaderno. Ma puoi controllare anche da lì.


13

Puoi usarlo netstatper capire il pid di ogni processo di ascolto.

netstat - Stampa connessioni di rete, tabelle di routing, statistiche di interfaccia, connessioni mascherate e appartenenze multicast

-a, --all Mostra i socket sia in ascolto che non in ascolto (per TCP questo significa connessioni stabilite). Con l'opzione --interfaces, mostra le interfacce non contrassegnate

--numeric, -n Mostra gli indirizzi numerici invece di provare a determinare i nomi simbolici di host, porta o utente.

-p, --program Mostra il PID e il nome del programma a cui appartiene ogni socket.

Ecco un esempio:

# 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

1
Grazie anche se sono stato informato che netstatè stato deprecato dagli strumenti iproute2 e sto cercando di evitarlo.
ThorSummoner,

12

La risposta di @Jofel ti mostra lo strumento appropriato da usare ss, ecco i sostituti degli altri strumenti di rete in iproute2.

I comandi obsoleti e i loro equivalenti iproute2 sono i seguenti:

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)

L'elenco di base è anche qui su Wikipedia: http://en.wikipedia.org/wiki/Iproute2 .

Riferimenti


1

Un altro metodo per lsofse non conosci il PID, ma solo il nome del Programma:

lsof -Pa -p $(pgrep [programName]) -i

non funziona con lsof4.89 su Ubuntu 16.04
palik

1
Questo sarà il caso se il programma ha generato più processi. In tal caso dovrai specificare il PID specifico quando esegui il comando lsof che ho dato. pgrep <program name>quindi scegliere il PID necessario per il comando sopra. sostituendo $(pgrep [programName])con il PID #
cryptoboy il

0

Hai provato, anche questo fa lo stesso

netstat -plnt | grep 27071

successo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.