From 3dc7c113d17866937a9a13ac7427124064a9a6ce Mon Sep 17 00:00:00 2001
From: Amedeo <amedeo.sapio@gmail.com>
Date: Fri, 25 Mar 2016 13:58:17 +0100
Subject: [PATCH] Fixed count and stop_filter in sniff() (plus minor changes)

---
 scapy/sendrecv.py | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/scapy/sendrecv.py b/scapy/sendrecv.py
index 2c7218b6..d9661201 100644
--- a/scapy/sendrecv.py
+++ b/scapy/sendrecv.py
@@ -565,9 +565,9 @@ interfaces)
     """
     c = 0
     label = {}
-    ls = []
+    sniff_sockets = []
     if opened_socket is not None:
-        ls = [opened_socket]
+        sniff_sockets = [opened_socket]
     else:
         if offline is None:
             if L2socket is None:
@@ -576,24 +576,25 @@ interfaces)
                 for i in iface:
                     s = L2socket(type=ETH_P_ALL, iface=i, *arg, **karg)
                     label[s] = i
-                    ls.append(s)
+                    sniff_sockets.append(s)
             else:
-                ls = [L2socket(type=ETH_P_ALL, iface=iface, *arg, **karg)]
+                sniff_sockets = [L2socket(type=ETH_P_ALL, iface=iface, *arg,
+                                           **karg)]
         else:
-            ls = [PcapReader(offline)]
+            sniff_sockets = [PcapReader(offline)]
 
     lst = []
     if timeout is not None:
         stoptime = time.time()+timeout
     remain = None
     try:
-        stop_event = 0
+        stop_event = False
         while not stop_event:
             if timeout is not None:
                 remain = stoptime-time.time()
                 if remain <= 0:
                     break
-            sel = select(ls, [], [], remain)
+            sel = select(sniff_sockets, [], [], remain)
             for s in sel[0]:
                 p = s.recv()
                 if p is not None:
@@ -609,9 +610,11 @@ interfaces)
                         if r is not None:
                             print r
                     if stop_filter and stop_filter(p):
-                        stop_event = 1
+                        stop_event = True
+                        break
                     if count > 0 and c >= count:
-                        stop_event = 1
+                        stop_event = True
+                        break
     except KeyboardInterrupt:
         pass
     if opened_socket is None:
@@ -654,7 +657,7 @@ stop_filter: python function applied to each packet to determine
         stoptime = time.time()+timeout
     remain = None
     try:
-        stop_event = 0
+        stop_event = False
         while not stop_event:
             if timeout is not None:
                 remain = stoptime-time.time()
@@ -676,9 +679,11 @@ stop_filter: python function applied to each packet to determine
                         if r is not None:
                             print r
                     if stop_filter and stop_filter(p):
-                        stop_event = 1
+                        stop_event = True
+                        break
                     if count > 0 and c >= count:
-                        stop_event = 1
+                        stop_event = True
+                        break
     except KeyboardInterrupt:
         pass
     finally:
-- 
GitLab