在shell脚本里的tcpdump没有捕获任何东西

我想启动一个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节点)上的一个虚拟片,尽pipe我可以从ps -ef看到进程tcpdump它没有捕获任何东西,我看到mypcap文件是0字节之后cap.sh完成

什么是潜在的原因? 以及如何使shell脚本中的tcpdump捕获数据包? 谢谢!

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

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

一个潜在的原因:eth0在虚拟环境中不存在。