我想启动一个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
它什么也没捕捉到
我看到 mypcap
文件在 cap.sh
完成后为 0 字节
可能的原因是什么? 以及如何使 shell 脚本中的 tcpdump 捕获数据包? 谢谢!
最佳答案
不要使用kill -9
。这不仅几乎总是错误的做法,而且还可能导致这里出现问题,因为缓冲数据被丢弃而不是写入磁盘。使用普通的 kill 或 kill -2
。
另一种选择是添加 -U
选项以在每个数据包后刷新输出缓冲区。
关于linux - shell 脚本中的 tcpdump 没有捕获任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16096027/