嗅探数据包时,scapy的超时选项出现问题。据我所知,如果你使用这样的东西:
test = sniff(filter="ip and icmp ", timeout = 2)
print(test)
你的嗅觉应该在2秒钟后停止。然而,这是100%无效的。据我所知,最大的问题之一也是,如果你设置timeout=5并运行嗅探器,然后在并行命令提示符下运行ping google.com,它将捕获4个数据包,直到嗅探完成才显示,然后无限期地坐在那里,直到你再发送或接收1个icmp数据包,只有一个,然后它将终止嗅探和打印(测试),总共5个icmp4个来自第一个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中提取函数并意识到该函数存在相同的问题后,我缩小了问题范围。当您将过滤器传递到嗅探函数时,它会改变超时的工作方式。如果运行:
来自scape.all导入*
test = sniff(timeout = 5)
print(test)
你会没事的,它会在5秒时自动超时,否则它会挂起,无法正确完成超时循环。
我尝试过完全相同的代码,它非常适合我。尝试重新安装scapy,或者恢复到旧版本。我发现对我来说,2.2.0dev是比较稳定的构建之一。