linux – tcpdump在shell脚本中捕获任何内容

我想启动一个TCP程序并捕获相关的数据包,
我的shell脚本cap.sh如下:

    sudo tcpdump -i eth0 -w mypcap &
    sleep 3
    ./tcp_receiver
    sleep 2
    x=`ps -ef|grep "tcpdump"|grep -v "grep"|awk '{print $2}'`
    sudo kill -9 $x

我运行cap.sh

    sudo ./cap.sh

所以实际上在这个shell中,我可以在没有密码的情况下运行sudo
并且主机只是远程机器上的虚拟切片(PLanetlab节点)
虽然我可以从ps -ef看到进程tcpdump
它什么也没捕捉到
在cap.sh完成后,我看到mypcap文件是0字节

有什么可能的原因?
以及如何使shell脚本中的tcpdump捕获数据包?
谢谢!

解决方法:

不要使用kill -9.它不仅几乎总是错误的事情,它可能导致问题在这里,通过丢弃缓冲数据而不是写入磁盘.使用普通老杀,或杀-2.

另一个选项是添加-U选项以在每个数据包之后刷新输出缓冲区.

上一篇:linux – tcpdump从哪个级别的网络堆栈获取信息?


下一篇:tcpdump抓包