Come tracciare l'attività di rete di un comando?


13

Voglio rintracciare l'attività di rete di un comando, ho provato tcpdump e la traccia senza successo.

Ad esempio, se sto installando un pacchetto o usando qualsiasi comando che tenta di raggiungere un sito, desidero visualizzare quell'attività di rete (il sito che tenta di raggiungere).

Immagino che possiamo farlo usando tcpdump. Ho provato ma sta monitorando tutte le attività di rete del mio sistema. Diciamo che se eseguo più comandi relativi alla rete e voglio tracciare solo una particolare attività di rete di comando, quella volta è difficile trovare la soluzione esatta.

C'è un modo per farlo?

AGGIORNARE:

Non voglio tracciare tutto ciò che accade sulla mia interfaccia di rete. Voglio solo tracciare l'attività di rete del comando (per esempio #yum install -y vim). Come il sito che tenta di raggiungere.


1
Inserisci l'applicazione in uno spazio dei nomi di rete, quindi usa tcpdump / WireShark. Vedi ad esempio qui .
Dirkt

Risposte:


17

netstat per semplicità

Utilizzo netstate grepping sul PID o sul nome del processo:

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird

E potresti usare watchper gli aggiornamenti dinamici:

watch 'netstat -np --inet | grep "thunderbird"'

Con:

  • -n: Mostra gli indirizzi numerici invece di provare a determinare i nomi simbolici di host, porta o utente
  • -p: Mostra il PID e il nome del programma a cui appartiene ogni socket.
  • --inet: Mostra solo socket di protocollo raw, udp e tcp.

straccia per la verbosità

Hai detto di aver provato lo stracestrumento, ma hai provato l'opzione trace=network? Nota che l'output può essere abbastanza dettagliato, quindi potresti aver bisogno di un po 'di grepping. Potresti iniziare cacciando su "sin_addr".

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr

Oppure, per un processo già in esecuzione, utilizzare il PID:

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr

+1 per netstatcui IMHO è la soluzione più semplice e accurata.
dr01,

@Gohu ho fatto lo stesso per dnf. ma senza fortuna. Ho provato ad installare alcuni pacchetti usando dnf, quindi vedo che il processo dnf è in esecuzione (nome del processo: dnf secondo il comando top e ps aux). Purtroppo, non ho ricevuto alcun output da netstat -np --inet | grep "dnf".
Buvanesh Kumar il

+1 per lo strace. È stato risolto il mio problema. Sono in grado di ottenere gli indirizzi IP. Grazie mille per la tua risposta :) @Gohu. Immagino stia fornendo tutti gli indirizzi IP che raggiunge sulla rete (ad es. IP del router e altri IP). Se sai, è possibile tracciare solo l'IP di destinazione?
Buvanesh Kumar il

Puoi provare a filtrare straceun po 'di più l' output, mantenendo solo i connectsyscall e rimuovendo le dnsrichieste (porta 53) con:| grep connect | grep -v 'sin_port=htons(53)'
Gohu

+1 per l'opzione trace-network su strace
phreed


5

sysdig ti consente di monitorare tutte le attività del kernel o di diversi comandi in esecuzione nel tuo sistema in una volta, incluso e non limitato all'attività di rete.

Dato che l'output può essere grande, devi creare filtri, la pagina predefinita per i filtri più elementari è abbastanza comprensibile.

Ha anche il vantaggio di non essere utilizzato come wrapper di applicazione come in strace, e può essere abbastanza potente.

Dagli esempi di Sysdig

Networking

Scopri i principali processi in termini di utilizzo della larghezza di banda della rete

sysdig -c topprocs_net 

Mostra i dati di rete scambiati con l'host 192.168.0.1

Come binario:

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   

Come ASCII:

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

Vedi le principali porte del server locale:

In termini di connessioni stabilite:

sysdig -c fdcount_by fd.sport "evt.type=accept"   

In termini di byte totali:

sysdig -c fdbytes_by fd.sport 

Vedi i migliori IP client

In termini di connessioni stabilite

sysdig -c fdcount_by fd.cip "evt.type=accept"   

In termini di byte totali

sysdig -c fdbytes_by fd.cip 

Elenca tutte le connessioni in entrata che non sono servite da apache.

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"

1

È possibile utilizzare WireShark per annusare tutto il traffico di input e output di un'interfaccia di rete. Nel caso in cui sia necessaria un'opzione senza GUI, è possibile utilizzare Tshark.

Con entrambe le opzioni è possibile visualizzare tutto il traffico di rete e salvarlo per analizzare successivamente tutte le connessioni stabilite.


1
Come ho detto prima, se eseguo più comandi relativi alla rete, come posso sapere quale comando sta ottenendo quale sito?
Buvanesh Kumar il

Questa è una risposta più generica. Che già so che possiamo monitorare l'attività di rete di un'interfaccia di rete :). Sto cercando il monitoraggio di una particolare statica della rete di comando.
Buvanesh Kumar il

Se sai quali porte utilizzare il comando potresti essere in grado di filtrare l'annusatore per limitarlo al comando desiderato. Tuttavia, ciò potrebbe non essere fattibile nella tua situazione.
Ricard Molins,
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.