[tor-commits] [ooni-probe/master] Patched upstream scapy, see /ooni/lib/001-scapy_missing-exc.sh.patch. Modified

isis at torproject.org isis at torproject.org
Tue Dec 18 05:53:46 UTC 2012


commit 73fe964c1979e16672c14ccc652ef115634704ac
Author: Isis Lovecruft <isis at torproject.org>
Date:   Thu Dec 13 21:17:28 2012 +0000

    Patched upstream scapy, see /ooni/lib/001-scapy_missing-exc.sh.patch. Modified
    txscapy so that user's running unpatched versions will also work.
    
    * Fixed timeout settings for ScapySender.
    * Fixed an error where scapy.utils.PcapWriter wasn't expecting unicode...
    * Cleaned up extra imports in /ooni/utils/txscapy.py.
    * Cleaned up a log statement which concatenated to strings (this causes errors
      for twisted sometimes).
    * Moved exception classes to beginning of txscapy.py file.
---
 ooni/lib/001-scapy_missing-exc.sh.patch |   78 +++++++++++++++++++++++++++++++
 ooni/utils/txscapy.py                   |   68 ++++++++++++++++-----------
 2 files changed, 119 insertions(+), 27 deletions(-)

diff --git a/ooni/lib/001-scapy_missing-exc.sh.patch b/ooni/lib/001-scapy_missing-exc.sh.patch
new file mode 100644
index 0000000..3f5095c
--- /dev/null
+++ b/ooni/lib/001-scapy_missing-exc.sh.patch
@@ -0,0 +1,78 @@
+#
+# Add a missing Exception class to /scapy/arch/linux.py
+# 
+# To apply this patch:
+# STEP 1: Chdir to the source directory. If you have scapy installed, this is
+#         likely located at /usr/share/pyshared.
+# STEP 2: Run the 'patch' program with this file as input, i.e.:
+#
+#    /usr/share/pyshared$ patch -p1 ./scapy/arch/linux.py </path/to/this/file>
+#
+# To apply this patch with the use of 'applypatch':
+# STEP 1: Chdir to the source directory.
+# STEP 2: Run the 'applypatch' program with this patch file as input.
+#
+# @authors: Isis Lovecruft
+# @license: This file is part of ooniprobe, see LICENSE file for details.
+# @copyright: 2012 Isis Lovecruft
+#
+#### End of Preamble ####
+
+#### Patch data follows ####
+diff -c 'scapy/arch/linux.py' 'scapy/arch/linux.py-patched'
+Index: ./scapy/arch/linux.py
+*** ./scapy/arch/linux.py	Thu Dec 13 21:26:59 2012
+--- ./scapy/arch/linux.py-patched	Thu Dec 13 21:27:53 2012
+***************
+*** 14,21 ****
+  from scapy.data import *
+  from scapy.supersocket import SuperSocket
+  import scapy.arch
+! from scapy.error import warning
+! 
+  
+  
+  # From bits/ioctls.h
+--- 14,20 ----
+  from scapy.data import *
+  from scapy.supersocket import SuperSocket
+  import scapy.arch
+! from scapy.error import warning,Scapy_Exception
+  
+  
+  # From bits/ioctls.h
+#### End of Patch data ####
+
+#### ApplyPatch data follows ####
+# Data version        : 1.0
+# Date generated      : Thu Dec 13 21:33:12 2012
+# Generated by        : makepatch 2.03
+# Recurse directories : Yes
+# Excluded files      : (\A|/).*\~\Z
+#                       (\A|/).*\.a\Z
+#                       (\A|/).*\.bak\Z
+#                       (\A|/).*\.BAK\Z
+#                       (\A|/).*\.elc\Z
+#                       (\A|/).*\.exe\Z
+#                       (\A|/).*\.gz\Z
+#                       (\A|/).*\.ln\Z
+#                       (\A|/).*\.o\Z
+#                       (\A|/).*\.obj\Z
+#                       (\A|/).*\.olb\Z
+#                       (\A|/).*\.old\Z
+#                       (\A|/).*\.orig\Z
+#                       (\A|/).*\.rej\Z
+#                       (\A|/).*\.so\Z
+#                       (\A|/).*\.Z\Z
+#                       (\A|/)\.del\-.*\Z
+#                       (\A|/)\.make\.state\Z
+#                       (\A|/)\.nse_depinfo\Z
+#                       (\A|/)core\Z
+#                       (\A|/)tags\Z
+#                       (\A|/)TAGS\Z
+# p 'scapy/arch/linux.py' 16563 1355434073 0100644
+#### End of ApplyPatch data ####
+
+#### End of Patch kit [created: Thu Dec 13 21:33:12 2012] ####
+#### Patch checksum: 56 1830 50583 ####
+#### Checksum: 74 2507 41533 ####
diff --git a/ooni/utils/txscapy.py b/ooni/utils/txscapy.py
index e91da09..647f20e 100644
--- a/ooni/utils/txscapy.py
+++ b/ooni/utils/txscapy.py
@@ -18,35 +18,33 @@ from twisted.internet import reactor, threads, error
 from twisted.internet import defer, abstract
 from zope.interface import implements
 
-from scapy.config import conf
-from scapy.all import PcapWriter, MTU
 from scapy.all import BasePacketList, conf, PcapReader
-from scapy.all import Gen, SetGen
+from scapy.all import Gen, SetGen, MTU
+from scapy.error import Scapy_Exception
 
-from ooni.utils import log
 from ooni import config
+from ooni.utils import log
 
 try:
-    conf.use_pcap = True
-    conf.use_dnet = True
-
     from scapy.all import PcapWriter
     from scapy.arch import pcapdnet
-
     config.pcap_dnet = True
-
-except ImportError, e:
-    log.err("pypcap or dnet not installed. "
-            "Certain tests may not work.")
-
+    conf.use_pcap = True
+    conf.use_dnet = True
+except ImportError:
+    log.err("pypcap or dnet not installed. Certain tests may not work.")
     config.pcap_dnet = False
     conf.use_pcap = False
     conf.use_dnet = False
-
     from scapy.all import PcapWriter
 
-from scapy.all import BasePacketList, PcapReader
-from scapy.all import Gen, SetGen, MTU
+
+class ProtocolNotRegistered(Exception):
+    pass
+
+class ProtocolAlreadyRegistered(Exception):
+    pass
+
 
 def getNetworksFromRoutes():
     from scapy.all import conf, ltoa, read_routes
@@ -72,11 +70,6 @@ def getDefaultIface():
             return net.iface
     raise IfaceError
 
-class ProtocolNotRegistered(Exception):
-    pass
-
-class ProtocolAlreadyRegistered(Exception):
-    pass
 
 class ScapyFactory(abstract.FileDescriptor):
     """
@@ -88,9 +81,23 @@ class ScapyFactory(abstract.FileDescriptor):
         if interface == 'auto':
             interface = getDefaultIface()
         if not super_socket:
-            super_socket = conf.L3socket(iface=interface,
-                    promisc=True, filter='')
-            #super_socket = conf.L2socket(iface=interface)
+            try:
+                # scapy is missing an import in /scapy/arch/linux.py
+                # see /ooni/lib/000-scapy-missing-exc.patch
+                super_socket = conf.L3socket(iface=interface,
+                                             promisc=True, filter='')
+                #super_socket = conf.L2socket(iface=interface)
+            except NameError, ne:
+                raise Scapy_Exception("Filter parse error")
+            except Scapy_Exception, se:
+                log.err("txscapy: %s" % se.message)
+                log.debug("txscapy: Trying socket setup again without filter")
+                try:
+                    super_socket = conf.L3socket(iface=interface, 
+                                                 promisc=True)
+                except:
+                    log.err("txscapy: Socket setup failed, giving up...")
+                    raise sys.exit(1)
 
         self.protocols = []
         fdesc._setCloseOnExec(super_socket.ins.fileno())
@@ -149,9 +156,13 @@ class ScapyProtocol(object):
         raise NotImplementedError
 
 class ScapySender(ScapyProtocol):
-    timeout = 5
     
-    # This deferred will fire when we have finished sending a receiving packets.
+    # This deferred will fire when we have finished sending and receiving
+    # packets.   
+    timeout = 5
+    if config.advanced.default_timeout:
+        timeout = int(config.advanced.default_timeout)
+
     # Should we look for multiple answers for the same sent packet?
     multi = False
 
@@ -232,7 +243,10 @@ class ScapySender(ScapyProtocol):
 
 class ScapySniffer(ScapyProtocol):
     def __init__(self, pcap_filename, *arg, **kw):
-        self.pcapwriter = PcapWriter(pcap_filename, *arg, **kw)
+        # The "str(pcap_filename)" explicit typing is due to an error where
+        # scapy.utils.PcapWriter expects strings, and it's getting unicode
+        # due to the "# -*- coding: utf-8 -*-"...this might be a problem...
+        self.pcapwriter = PcapWriter(str(pcap_filename), *arg, **kw)
 
     def packetReceived(self, packet):
         self.pcapwriter.write(packet)





More information about the tor-commits mailing list