我想启动一个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选项以在每个数据包之后刷新输出缓冲区.