[tor-commits] [ooni-probe/master] Reactor seems to not be cleared, or my actual network here is severely messed

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


commit 9a2cb04b2f5938e8d11ecd13ba0e5d4b01f9cdef
Author: Isis Lovecruft <isis at torproject.org>
Date:   Fri Nov 16 11:22:14 2012 +0000

    Reactor seems to not be cleared, or my actual network here is severely messed
    up.
---
 nettests/bridge_reachability/echo.py |   75 ++++++++++++++++++----------------
 1 files changed, 40 insertions(+), 35 deletions(-)

diff --git a/nettests/bridge_reachability/echo.py b/nettests/bridge_reachability/echo.py
index 40436e7..df121b4 100644
--- a/nettests/bridge_reachability/echo.py
+++ b/nettests/bridge_reachability/echo.py
@@ -17,15 +17,15 @@ import sys
 
 from twisted.python   import usage
 from twisted.internet import reactor, defer
-from ooni             import nettest
+from ooni.nettest     import NetTestCase
 from ooni.utils       import log, net, Storage
 
 try:
-    from scapy.all             import IP, ICMP
-    from scapy.all             import sr1
-    from ooni.lib              import txscapy
-    from ooni.lib.txscapy      import txsr, txsend
-    from ooni.templates.scapyt import BaseScapyTest
+    from scapy.all        import IP, ICMP
+    from scapy.all        import sr1
+    from ooni.lib         import txscapy
+    from ooni.lib.txscapy import txsr, txsend
+    from ooni.templates.scapyt   import BaseScapyTest
 except:
     log.msg("This test requires scapy, see www.secdev.org/projects/scapy")
 
@@ -41,9 +41,9 @@ class UsageOptions(usage.Options):
         ['pcap', 'p', None, 'Save pcap to this file'],
         ['receive', 'r', True, 'Receive response packets']]
 
-class EchoTest(nettest.NetTestCase):
+class EchoTest(BaseScapyTest):
     """
-    xxx fill me in
+    Basic ping test. This takes an input file containing one IP or hostname
     """
     name         = 'echo'
     author       = 'Isis Lovecruft <isis at torproject.org>'
@@ -69,7 +69,7 @@ class EchoTest(nettest.NetTestCase):
                 iface = net.getDefaultIface()
             except Exception, e:
                 log.msg("No network interface specified!")
-                log.err(e)
+                log.exception(e)
             else:
                 log.msg("Using system default interface: %s" % iface)
                 self.interface = iface
@@ -85,10 +85,10 @@ class EchoTest(nettest.NetTestCase):
         if not self.dst:
             if self.file:
                 self.dstProcessor(self.file)
-                for key, value in self.destinations.items():
-                    for label, data in value.items():
-                        if not 'ans' in data:
-                            self.dst = label
+                for address, details in self.destinations.items():
+                    for labels, data in details.items():
+                        if not 'ans' in labels:
+                            self.dst = details['dst_ip']
         else:
             self.addDest(self.dst)
         log.debug("self.dst is now: %s" % self.dst)
@@ -100,8 +100,6 @@ class EchoTest(nettest.NetTestCase):
         self.destinations[d] = {'dst_ip': d}
 
     def dstProcessor(self, inputfile):
-        from ipaddr import IPAddress
-
         if os.path.isfile(inputfile):
             with open(inputfile) as f:
                 for line in f.readlines():
@@ -110,23 +108,30 @@ class EchoTest(nettest.NetTestCase):
                     self.addDest(line)
 
     def test_icmp(self):
-        def process_response(echo_reply, dest):
-           ans, unans = echo_reply
-           if ans:
-               log.msg("Recieved echo reply from %s: %s" % (dest, ans))
-           else:
-               log.msg("No reply was received from %s. Possible censorship event." % dest)
-               log.debug("Unanswered packets: %s" % unans)
-           self.report[dest] = echo_reply
-
-        for label, data in self.destinations.items():
-            reply = sr1(IP(dst=lebal)/ICMP())
-            process = process_reponse(reply, label)
-
-        #(ans, unans) = ping
-        #self.destinations[self.dst].update({'ans': ans,
-        #                                    'unans': unans,
-        #                                    'response_packet': ping})
-        #return ping
-
-        #return reply
+
+        def process_response(pkt, dest):
+            try:
+                ans, unans = pkt
+                if ans:
+                    log.msg("Recieved echo-reply: %s" % pkt.summary())
+                    self.destinations[dest]['ans'] = a.show2()
+                    self.report['response'] = [a.show2() for a in ans]
+                    self.report['censored'] = False
+                else:
+                    log.msg("No reply from %s. Possible censorship event." % dest)
+                    log.debug("Unanswered packets: %s" % unans.summary())
+                    self.report['response'] = [u.show2() for u in unans]
+                    self.report['censored'] = True
+            except Exception, e:
+                log.exception(e)
+
+        try:
+            for dest, data in self.destinations.items():
+                reply = txsr(IP(dst=dest)/ICMP(),
+                           iface=self.interface,
+                           retry=self.count,
+                           multi=True,
+                           timeout=self.timeout)
+                process = process_response(reply, dest)
+        except Exception, e:
+            log.exception(e)





More information about the tor-commits mailing list