linux - shell 脚本中的 tcpdump 没有捕获任何内容

标签 linux 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 节点) 虽然我可以从 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/

相关文章:

linux - 如何预填充命令行输入

sockets - 在已建立的 TCP 连接中的 TCP 数据包中查找 SSL 版本

php - 来自 BASH 的 Tcpdump

android - 即使在Android内核中启用usbmon后也没有USB总线文件?

python - 更快的解析 .pcap 的方法

linux - tcpdump 的侵入性如何?

C 代码在 Windows 上比在 Linux 上慢

linux - 一行关闭 Linux 中打开的 ssh 端口

Python 脚本在一段时间后停止

Swift 中 dispatch_get_specific 的 Linux 编译错误