【问题标题】:tcpdump inside a shell script captures nothingshell 脚本中的 tcpdump 没有捕获任何内容
【发布时间】:2023-03-23 06:32:01
【问题描述】:

我想启动一个 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 捕获数据包? 谢谢!

【问题讨论】:

    标签: linux tcpdump


    【解决方案1】:

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

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

    【讨论】:

    • 通过 grepping 进程列表来查找 PID 也是一个坏主意。如果有任何其他 tcpdump 实例,您也将终止该进程。相反,请在使用以下答案启动 tcpdump 后保存 PID:stackoverflow.com/a/1911387/138329
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2022-11-14
      • 2016-06-08
      • 1970-01-01
      • 2016-10-08
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多