![使用 buffer -B 选项的 tcpdump 的管道输出](https://linux22.com/image/109634/%E4%BD%BF%E7%94%A8%20buffer%20-B%20%E9%80%89%E9%A1%B9%E7%9A%84%20tcpdump%20%E7%9A%84%E7%AE%A1%E9%81%93%E8%BE%93%E5%87%BA.png)
我正在使用以下命令在 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