2014-09-01 10 views

risposta

69

Ecco un modo pulito di fare ciò che si vuole:

tcpdump -w - | tee somefile | tcpdump -r - 

Cosa fa:

  • -w - dice tcpdump per scrivere i dati binari stdout
  • tee scrive che i dati binari ad un file AND a proprio
  • -r - dice al secondo tcpdump per ottenere i suoi dati dal suo stdin
+1

Utilizzando questa tecnica, WireShark è lamentato di alcuni dei file sostenendo che l'ultimo pacchetto è incompleta. Suppongo che tcpdump si annulli e scriva tutti i dati prima di terminare, ma, in caso contrario, l'opzione -U potrebbe essere utile qui. Dalla pagina man: 'Usa il flag -U per far sì che i pacchetti vengano scritti non appena vengono ricevuti. (cercando di non perdere alcun pacchetto bufferizzato/ancora non scritto su file quando tcpdump viene ucciso). Non ho ancora avuto un cambiamento per confermarlo. – maganap

+0

Perché non può essere 'tcpdump host | tee/tmp/output'. Ciò evita un secondo tcpdump che si sta utilizzando alla fine. Destra ? – deppfx

+2

@deppfx Funzionerebbe, a costo di salvare solo il testo. '-w' causa' tcpdump' per scrivere i dati nel formato binario standard. – cnicutar

-1
tcpdump ${ARGS} & 
PID=$! 
tcpdump ${ARGS} -w ${filename} 
kill $PID 
Problemi correlati