查看以下示例
a = AsyncSniffer()
a.start()
a.stop()
a.stop((将引发异常。有没有一种方法可以在start((和stop((之间不添加time.sleep((来解决这个问题?
- 这当然是一个人为的例子,但如果我在start((和stop((之间创建一个测试存根,我们项目中的代码也会遇到同样的问题
更新:从pycharm运行tracebak:
FAILED [100%]
test_async_sniffer.py:3 (test_async_sniffer)
self = <scapy.sendrecv.AsyncSniffer object at 0x7f1d57a7f1f0>, join = True
def stop(self, join=True):
"""Stops AsyncSniffer if not in async mode"""
if self.running:
try:
> self.stop_cb()
E AttributeError: 'AsyncSniffer' object has no attribute 'stop_cb'
venv/lib/python3.8/site-packages/scapy/sendrecv.py:1017: AttributeError
During handling of the above exception, another exception occurred:
def test_async_sniffer():
a = AsyncSniffer()
a.start()
> a.stop()
test_async_sniffer.py:7:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <scapy.sendrecv.AsyncSniffer object at 0x7f1d57a7f1f0>, join = True
def stop(self, join=True):
"""Stops AsyncSniffer if not in async mode"""
if self.running:
try:
self.stop_cb()
except AttributeError:
> raise Scapy_Exception(
"Unsupported (offline or unsupported socket)"
)
E scapy.error.Scapy_Exception: Unsupported (offline or unsupported socket)
venv/lib/python3.8/site-packages/scapy/sendrecv.py:1019: Scapy_Exception
一个可能的答案,尽管并不漂亮:
a = AsyncSniffer()
a.start()
if not hasattr(a, 'stop_cb'):
time.sleep(0.06)
a.stop()
似乎start()
创建了属性stop_cb
,如果stop()
是在start()
之后调用的,那么stop_cb
还没有创建,所以我添加了一个带有睡眠的hasattr(测试显示0.06秒是足够的时间,但我想这是非常随意的(