Mostra le connessioni di rete di un processo


26

C'è un modo per mostrare le connessioni di un processo? Qualcosa del genere:

show PID

in cui showè un comando per fare questo, ed PIDè il pid del processo. L'output che desidero è composto da tutte le connessioni del processo (in tempo reale). Ad esempio, se il processo tenta di connettersi a 173.194.112.151, l'output è 173.194.112.151.

Un esempio più specifico con Firefox:

show `pidof firefox`

e con firefox vado prima su google.com , poi su unix.stackexchange.com e infine su 192.30.252.129 . L'output, quando chiudo il browser, deve essere:

google.com
stackexchange.com
192.30.252.129

(Ovviamente con il browser questo output non è realistico, perché ci sono molte altre connessioni correlate, ma questo è solo un esempio.)


Con quale variante Unix? La maggior parte ha strumenti per farlo, ma diversi.
Gilles 'SO- smetti di essere malvagio' il

Quindi essenzialmente vuoi un registro di tutte le connessioni?
Sergiy Kolodyazhnyy,

Penso che allora tcpdump o Wireshark dovrebbero fare il lavoro.
Sergiy Kolodyazhnyy,

Alcuni modi possibili per farlo: askubuntu.com/questions/11709/…
Mark Plotnick,

@Gilles Ubuntu 14.04.3 LTS
ᴇʀsᴇʀ

Risposte:


24

Stai cercando strace! Ho trovato questa risposta su askubuntu , ma è valida per Unix:

Per avviare e monitorare un nuovo processo:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

Per monitorare un processo esistente con un PID noto:

strace -p $PID -f -e trace=network -s 10000

Altrimenti, ma questo è specifico per Linux, è possibile eseguire il processo in uno spazio dei nomi di rete isolato e utilizzare WireShark per monitorare il traffico . Questo sarà probabilmente più conveniente della lettura del straceregistro:

  • creare uno spazio dei nomi di rete di prova:

    ip netns add test
    
  • creare una coppia di interfacce di rete virtuale (veth-a e veth-b):

    ip link add veth-a type veth peer name veth-b
    
  • cambia lo spazio dei nomi attivo dell'interfaccia veth-a:

    ip link set veth-a netns test
    
  • configurare gli indirizzi IP delle interfacce virtuali:

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • configurare il routing nello spazio dei nomi del test:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • attiva ip_forward e stabilisci una regola NAT per inoltrare il traffico proveniente dallo spazio dei nomi che hai creato (devi regolare l'interfaccia di rete e l'indirizzo IP SNAT):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
    

    (Puoi anche usare la regola MASQUERADE se preferisci)

  • infine, puoi eseguire il processo che desideri analizzare nel nuovo spazio dei nomi, e WireShark:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    Dovrai monitorare l'interfaccia veth-a.


2
straceè in realtà specifico per il kernel Linux, quindi non è valido per tutti i sistemi operativi simili a Unix. A quanto ho capito, i sistemi simili a BSD hanno utilità simili (DTrace e truss). Comunque, buona risposta (così votata). Benvenuto in Stack Exchange.
Anthony G - giustizia per Monica il

La risposta sembra puntare nella giusta direzione, ma sto avendo problemi di interpretare l' straceuscita , mentre l'esame git fetch. Mi aspettavo di vedere una sorta di URL incluso nell'output, come richiesto anche dall'OP. Qualcuno può aiutare?
andreee

14

Provare

lsof -i -a -p `pidof firefox`

Funziona parzialmente: stampa alcune delle connessioni correnti del processo, ma poi si chiude automaticamente. Per alcuni programmi l'output è solo questo avviso:lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /home/user/.gvfs Output information may be incomplete.
ᴇʀsᴇʀ

È possibile aggiungere opzioni -r1per ripetere l'output ogni secondo e -wper eliminare gli avvisi.
alxrem,

2
Questo mostra solo le connessioni in un determinato momento, non elenca tutte le connessioni che un processo effettua nel corso della sua vita. Anche se metti questo comando in un ciclo, mancherà connessioni di breve durata.
Gilles 'SO- smetti di essere malvagio' il

L'interrogante non ha chiesto di visualizzare le connessioni per tutta la sua vita. Si potrebbe interpretare (in real-time)come from the point in time of tracking and forward.
llua

8

Ecco un altro approccio:

ss -nap | grep $(pidof firefox)

Uscita campione:

tcp    ESTAB      0      0          192.168.0.222:49050    216.58.218.164:443    users:(("firefox",3280,69))
tcp    ESTAB      0      0          192.168.0.222:48630    198.252.206.25:443    users:(("firefox",3280,106))
tcp    ESTAB      0      0          192.168.0.222:44220     216.58.217.38:443    users:(("firefox",3280,140))
tcp    ESTAB      0      0          192.168.0.222:52690    54.240.170.181:80     users:(("firefox",3280,107))
tcp    ESTAB      0      0          192.168.0.222:48744    198.252.206.25:443    users:(("firefox",3280,87))
tcp    ESTAB      0      0          192.168.0.222:48811    198.252.206.25:443    users:(("firefox",3280,73))

1
Questo mostra solo le connessioni in un determinato momento, non elenca tutte le connessioni che un processo effettua nel corso della sua vita. Anche se metti questo comando in un ciclo, mancherà connessioni di breve durata.
Gilles 'SO- smetti di essere malvagio' il

5

Puoi provare anche con netstat -p. Dalla pagina man:

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

Per mostrare solo le connessioni di rete utilizzare netstat -tup. Si noti che per visualizzare il PID del processo potrebbe essere necessario essere root.

Se non hai netstatsul tuo sistema potresti avere ss, che ha quasi la sintassi esatta. È possibile utilizzare quindi ss -tup(come root).


1
Questo mostra solo le connessioni in un determinato momento, non elenca tutte le connessioni che un processo effettua nel corso della sua vita. Anche se metti questo comando in un ciclo, mancherà connessioni di breve durata.
Gilles 'SO- smetti di essere malvagio' il

1
netstat -p | grep firefox | grep tcp
Philip Kirkbride,

@Gilles Il che significa che è un'ottima risposta per chiunque voglia vedere le connessioni in un determinato momento. Come è stato il mio caso di recente.
Jose Antonio Ripristina Monica il
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.