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?
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?
Risposte:
Puoi usare ss
dal 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.
-u
o solo -t
per udb o tcp. : +1: E tutti questi possono essere impilati in questo modo ss -tlnp
ss -tlnp | cat
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
Non sono a conoscenza di come utilizzare gli iproute2
strumenti. 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ì.
Puoi usarlo netstat
per 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
netstat
è stato deprecato dagli strumenti iproute2 e sto cercando di evitarlo.
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 .
Un altro metodo per lsof
se non conosci il PID, ma solo il nome del Programma:
lsof -Pa -p $(pgrep [programName]) -i
lsof
4.89 su Ubuntu 16.04
pgrep <program name>
quindi scegliere il PID necessario per il comando sopra. sostituendo $(pgrep [programName])
con il PID #
ss
non ha alcun filtro su PID ad eccezione dei socket netlink.