es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Scapy AsyncSniffer falla si se llama a stop() justo después de start()

Mira el siguiente ejemplo:

a = AsyncSniffer()
a.start()
a.stop()

a.stop() lanzará una excepción. ¿Existe alguna forma de solucionar esto sin agregar un time.sleep() entre start() y stop()?

  • Este es, por supuesto, un ejemplo ficticio, pero el código en nuestro proyecto tiene el mismo problema si creo un stub de prueba entre start() y stop().

Actualización:
traza de error desde la ejecución de PyCharm:

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
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La llamada a la función a.stop() en el ejemplo proporcionado lanzará una excepción. Según el seguimiento de pila de errores, el objeto AsyncSniffer no tiene el atributo stop_cb(). Para solucionar esto, podemos utilizar el método join() después de llamar al método stop() para esperar a que el sniffer se detenga antes de continuar. Esto garantizará que el sniffer se haya detenido antes de tomar más acciones. Un ejemplo actualizado sería:

    a = AsyncSniffer()
    a.start()
    a.stop()
    a.join()
    

    Esto asegurará que el AsyncSniffer se haya detenido antes de continuar sin utilizar time.sleep().

Comments are closed.