我想启动一个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节点)
虽然我可以从tcpdump
看到流程ps -ef
它什么也没捕捉到
在mypcap
完成
cap.sh
文件是0字节
有什么可能的原因? 以及如何使shell脚本中的tcpdump捕获数据包? 谢谢!
答案 0 :(得分:4)
请勿使用kill -9
。它不仅几乎总是错误的事情,它可能导致问题在这里,通过丢弃缓冲数据而不是写入磁盘。使用普通的旧杀,或kill -2
。
另一种选择是添加-U
选项以在每个数据包之后刷新输出缓冲区。
答案 1 :(得分:0)
一个可能的原因:虚拟化环境中不存在eth0。