2011-10-20 11 views
18

Qualcuno conosce un modo semplice per chiedere a Linux di "visualizzare ogni pacchetto internet da/per google chrome" o "visualizzare ogni pacchetto internet da/per il processo telnet con PID 10275"?Come posso acquisire i pacchetti di rete per PID?

L'esempio telnet non è troppo utile, dal momento posso solo usare wireshark o tcpdump per vedere tutte le conversazioni che coinvolgono TCP porta 23. Questo, e nessuno usa più telnet. Ma sniffare tutti i pacchetti da/verso applicazioni complesse che usano molte porte sembra una cosa utile.

ho trovato alcune risposte relative ad esplorare modi diversi di corroborare porte e PID (o programmi nomi) e simili, ma nulla di pacchetti

Sembra che qualcuno potrebbe essere stato disposto a pagare per questa risposta qualche tempo fa:

NetHogs è utile per vedere rapidamente quali programmi stanno creando il traffico attraverso un'interfaccia, ma non hanno un modo per catturare i pacchetti.

+0

Hrm, dovrei chiedere a serverfault, invece? –

+0

Questo probabilmente appartiene a SuperUser, in realtà. Una domanda interessante È possibile utilizzare WireShark per filtrare le richieste HTTP, ma è necessario collegare i driver del kernel per filtrare i pacchetti basati su PID – Bojangles

+1

È un problema un po 'complesso: i socket non sono di proprietà dei PID; puoi passarli da un processo all'altro. Se il processo A apre un socket, può passarlo per elaborare B e poi uscire - se stai filtrando sul processo PID di A, cosa succede ora? – bdonlan

risposta

1

Vorrei utilizzare lsof -i per ottenere i numeri di porta associati all'applicazione desiderata. il codice sarebbe simile a questo:

 
process=firefox 
for _port in `lsof -i | grep $process | cut -d' ' -f18 | cut -d: -f2 | cut -d'-' -f1` 
do 
    port=$_port 
    [[ "$_port" == +([a-zA-Z]) ]] && port=`cat /etc/services | grep '^$_port' | cut -d' ' -f12 | cut -d'/' -f1 | uniq | head -n 1` 

    echo "tcpdump -w ${port}.pcap port $port &" 
    tcpdump -w ${port}.pcap port $port & 
done 

Si noti che l'output dei comandi potrebbe essere diverso su diverse versioni/distribuzioni. Pertanto, è meglio controllare che i campi appropriati vengano tagliati prima di utilizzare lo script.

Inoltre, questo script non monitora le porte che vengono aperte in seguito. Per questo, prenderei in considerazione uno script più complicato che controlla le porte regolarmente (usando qualcosa come watch)

E ricorda di uccidere tutti i processi di tcpdump in seguito.

2

Tcpdump è in grado di indicare al PID/processo che un pacchetto proviene da/verso.
Lancia "-k NP" nelle opzioni.

versione supportata: tcpdump versione 4.3.0 - versione di Apple 56

+8

Domanda per Linux. Non esiste tale opzione nel tcpdump di Linux che mostra le informazioni PID. – shivams

+0

Funziona in MAC. –

Problemi correlati