From eee40b92a38fa8c6a0308d7b17f2196f06410650 Mon Sep 17 00:00:00 2001 From: Dmitriy Vorotnikov <vorotnikovdk@yandex.ru> Date: Wed, 2 Mar 2016 13:08:08 +0600 Subject: [PATCH] Allow L2pcapListenSocket.recv() to return None if where is no captured packets. Make sniff() to continue loop if received pkt is None (issue #74) --- scapy/arch/pcapdnet.py | 29 +++++++++++++---------------- scapy/sendrecv.py | 2 +- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/scapy/arch/pcapdnet.py b/scapy/arch/pcapdnet.py index c3333b0f..c608b70b 100755 --- a/scapy/arch/pcapdnet.py +++ b/scapy/arch/pcapdnet.py @@ -203,7 +203,7 @@ if conf.use_winpcapy: else: cls = conf.default_l2 warning("Unable to guess datalink type (interface=%s linktype=%i). Using %s" % (self.iface, ll, cls.name)) - + pkt = None while pkt is None: pkt = self.ins.next() @@ -438,23 +438,20 @@ if conf.use_pcap: cls = conf.default_l2 warning("Unable to guess datalink type (interface=%s linktype=%i). Using %s" % (self.iface, ll, cls.name)) - pkt = None - while pkt is None: - pkt = self.ins.next() - if pkt is not None: - ts,pkt = pkt - if scapy.arch.WINDOWS and pkt is None: + pkt = self.ins.next() + if scapy.arch.WINDOWS and pkt is None: raise PcapTimeoutElapsed - - try: - pkt = cls(pkt) - except KeyboardInterrupt: - raise - except: - if conf.debug_dissector: + if pkt is not None: + ts,pkt = pkt + try: + pkt = cls(pkt) + except KeyboardInterrupt: raise - pkt = conf.raw_layer(pkt) - pkt.time = ts + except: + if conf.debug_dissector: + raise + pkt = conf.raw_layer(pkt) + pkt.time = ts return pkt def send(self, x): diff --git a/scapy/sendrecv.py b/scapy/sendrecv.py index f24591f2..ee7aaca9 100644 --- a/scapy/sendrecv.py +++ b/scapy/sendrecv.py @@ -585,7 +585,7 @@ stop_filter: python function applied to each packet to determine if s in sel[0]: p = s.recv(MTU) if p is None: - break + continue if lfilter and not lfilter(p): continue if store: -- GitLab