如何捕获 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

相关内容