Python - scapy 超时选项根本不起作用

问题描述 投票:0回答:1

我在嗅探数据包时遇到 scapy 超时选项的问题。据我了解,如果你使用这样的东西:

test = sniff(filter="ip and icmp ", timeout = 2)
print(test)

您的嗅探应该在 2 秒后超时。然而,这100%不起作用。根据我收集的信息,最大的问题之一是,如果您设置超时 = 5 并运行嗅探器,然后在并行命令提示符中运行 ping google.com,它将捕获 4 个数据包直到嗅探才显示完成,然后无限期地坐在那里,直到您再发送或接收 1 个 icmp 数据包,仅一个,然后它将终止嗅探并打印(测试),总共 5 个 icmp 4 来自第一个 ping 集,1 个来自第二个 ping

我使用的是windows,这可能是我不知道的问题。我有Python 2.7。我的整个脚本,为了测试这一件事必须将其与更大的脚本隔离是这样的:

from scapy.all import *



test = sniff(filter="ip and icmp ", timeout = 5)
print(test)

就是这样 - 如果 timeout = 1,则在收到数据包之前它不会停止。

这是 scapy 的 sendrecv.py 中用于嗅探超时的代码

if timeout is not None:
    stoptime = time.time()+timeout
remain = None
while 1:
    try:
        if timeout is not None:
            remain = stoptime-time.time()
            if remain <= 0:
                break

从 scapy sendrecv.py 中剥离该函数并意识到该函数具有相同的问题后,我已经缩小了问题范围。当您将过滤器传递到嗅探函数时,它会改变超时的工作方式。如果你跑步:

来自 scapy.all 导入 *

test = sniff(timeout = 5)
print(test)

你会没事的,它会在 5 秒后自动超时,否则它会挂起并且无法正确完成超时循环。

python packet scapy packet-sniffers packet-injection
1个回答
0
投票

我尝试过完全相同的代码,它对我来说非常有效。尝试重新安装 scapy,或恢复到旧版本。我发现对我来说 2.2.0dev 是更稳定的版本之一。

© www.soinside.com 2019 - 2024. All rights reserved.