8

以阻塞方式,我可以这样做:

from scapy.all import *

sniff(filter"tcp and port 80", count=10, prn = labmda x:x.summary())
# Below code will be executed only after 10 packets have been received
do_stuff()
do_stuff2()
do_stuff3()

我希望能够以非阻塞方式嗅探带有 scapy 的数据包,如下所示:

def packet_recevied_event(p):
   print "Packet received event!"
   print p.summary()

# The "event_handler" parameter is my wishful thinking
sniff(filter"tcp and port 80", count=10, prn=labmda x:x.summary(), 
                                  event_handler=packet_received_event)

#I want this to be executed immediately
do_stuff()
do_stuff2()
do_stuff3()

总结一下:我的问题很清楚,我希望能够继续执行代码而不会被嗅探功能阻塞。一种选择是为此打开一个单独的线程,但我想避免它并尽可能使用 scapy 本机工具。

环境细节:

蟒蛇:2.7

斯皮比:2.1.0

操作系统:ubuntu 12.04 64bit

4

2 回答 2

2

此功能已在https://github.com/secdev/scapy/pull/1999中添加。我将使用 Scapy 2.4.3+(或 github 分支)。看看文档:https ://scapy.readthedocs.io/en/latest/usage.html#asynchronous-sniffing

>>> t = AsyncSniffer(prn=lambda x: x.summary(), store=False, filter="tcp")
>>> t.start()
>>> time.sleep(20)
>>> t.stop()
于 2019-06-15T21:18:19.493 回答
0

Scapy 没有 sniff 函数的异步版本。你将不得不触发线程。

这可能还有其他问题,主要与资源锁定有关。

于 2013-11-13T08:57:39.783 回答