4

我想启动一个 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后是0字节cap.sh

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

4

2 回答 2

4

不要使用kill -9. 这样做不仅几乎总是错误的,而且可能会导致问题出现在这里,因为缓冲的数据被丢弃而不是写入磁盘。使用普通的旧杀戮,或kill -2.

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

于 2013-04-19T02:11:09.977 回答
0

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

于 2013-04-19T02:26:17.730 回答