So erfassen Sie die Ausgabe von tcpdump

So erfassen Sie die Ausgabe von tcpdump

Ich möchte die Ausgabe von tcpdump erfassen und als Eingabe für einen zweiten Befehl verwenden. Übrigens möchte ich nicht das PCAP-Format verwenden!

Ich habe es versucht

sudo tcpdump -q ip > ./out.txt

Als ich mir die Datei ansah, sah ich, dass der gesamte STDOUT die ganze Zeit in die Datei geschrieben wurde, aber ich hatte erwartet, dass die Datei nur mit dem neuen Inhalt überschrieben wird. Wird der gesamte STDOUT gepuffert oder gelöscht, wenn er in das Terminal geschrieben wird?

  • Gibt es eine Möglichkeit, nur die teilweisen Aktualisierungen von STDOUT zu lesen?
  • Wie kann ich die Ausgabe von tcpdump kontinuierlich auf einen anderen Befehl umleiten?

Funktioniert das ?

sudo tcpdump -q ip | my_command

Antwort1

Um die Datei immer mit jeder neuen tcpdumpZeile zu überschreiben:

sudo tcpdump -l -q ip | awk '{system("echo " $0 " > out")}'

Um die Ausgabe für einen anderen Befehl zu verwenden, zBawk

  • $3= nur die 3. Spalte

    sudo tcpdump -l -q ip | awk '{print $3}'
    
  • Filtern nachtcp

    sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
    
  • Oder eine Kombination:

    sudo tcpdump -l -q ip | awk '/tcp/ {"echo " $0 " > out"}'
    

ausman tcpdump

   -l     Make  stdout  line  buffered.
          Useful if you want to see the data while capturing it.
          E.g.,
                 tcpdump -l | tee dat
          or
                 tcpdump -l > dat & tail -f dat

verwandte Informationen