如何捕捉 tcpdump 的輸出

如何捕捉 tcpdump 的輸出

我想捕獲 tcpdump 的輸出並將其用作第二個命令的輸入。順便說一句,我不想​​使用 pcap 格式!

我試過

sudo tcpdump -q ip > ./out.txt

當我觀看該文件時,我看到整個 STDOUT 始終寫入該文件,但我預計該文件只會被新內容覆蓋。當寫入終端機時,所有 STDOUT 是否都被緩衝或清除?

  • 有沒有辦法可以只讀取 STDOUT 的部分更新?
  • 如何將輸出從 tcpdump 連續重定向到其他 cmd?

這有效嗎?

sudo tcpdump -q ip | my_command

答案1

要始終用每個新行覆蓋檔案tcpdump

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

將輸出用於其他命令,例如awk

  • $3= 僅第三列

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

    sudo tcpdump -l -q ip | awk '/tcp/ {print $0}'
    
  • 或組合:

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

man 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

相關內容