使用 buffer -B 选项的 tcpdump 的管道输出

使用 buffer -B 选项的 tcpdump 的管道输出

我正在使用以下命令在 Ubuntu 16.04LTS 上处理 tcpdump 的输出:

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -l | python script.py

这是可行的,但不幸的是,对于我想要编写的脚本来说,有太多的数据包需要处理,因此我想每 100 毫秒左右删除一次来自同一 IP 地址的数据包。我在 tcpdump 联机帮助页中没有看到执行此操作的方法。有没有办法做到这一点?

我确实看到您可以使用调整缓冲区大小-B,但是当我尝试使用测试 python 脚本执行以下命令时(仅输出在 stdin 上读取的内容):

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l | python test.py

除了输出到终端的空白行之外,我什么也没有得到。我不明白缓冲区是如何工作的,因为如果我不将其通过管道传输到脚本,则终端的输出可以正常工作:

$ sudo tcpdump -i wlan0 -e -s 64 -n -j adapter -K -B 64 -l

(Python脚本):

import sys

while True:
    print sys.stdin.readline()

有人可以解释是否有一种方法可以有效地限制输出的每个 IP 地址每秒的数据包数量,如果没有,-B 选项如何工作,以及是否可以像这样通过管道传输到 python 脚本?

答案1

经过反复试验,我发现如果我在 -B 选项中尝试任何低于 256 的值,就会失败。因此,如果这对其他人有帮助,请至少使用-B 256

相关内容