【问题标题】:Scapy AsyncSniffer fails if stop() is called right after start()如果在 start() 之后立即调用 stop(),Scapy AsyncSniffer 将失败
【发布时间】:2022-01-02 20:08:57
【问题描述】:

看下面的例子

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

【问题讨论】:

    标签: asynchronous scapy packet-sniffers sniffing sniffer


    【解决方案1】:

    一个可能的答案,虽然不漂亮:

        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 秒有足够的时间,但我想这很随意)

    【讨论】:

    • 阅读答案我相信我刚刚添加了一个带有 if 块的 time.sleep...正是我在问题中要求不要做的...
    猜你喜欢
    • 1970-01-01
    • 2012-12-10
    • 2021-10-13
    • 1970-01-01
    • 2021-07-08
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多