[tor-commits] [ooni-probe/master] Move startTor and startSniffing methods into Director

isis at torproject.org isis at torproject.org
Sun Mar 10 01:57:02 UTC 2013


commit 5f589c687d42b7f24049081df9e0f64967e1c8ff
Author: aagbsn <aagbsn at extc.org>
Date:   Wed Jan 16 20:34:30 2013 +0000

    Move startTor and startSniffing methods into Director
    
    Removes unused imports in runner and adds exceptions to errors
---
 ooni/director.py |  110 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 ooni/errors.py   |    5 ++
 ooni/runner.py   |  111 +-----------------------------------------------------
 3 files changed, 116 insertions(+), 110 deletions(-)

diff --git a/ooni/director.py b/ooni/director.py
index 80cf22c..b3dfba3 100644
--- a/ooni/director.py
+++ b/ooni/director.py
@@ -1,7 +1,16 @@
+import sys
+from ooni import config
 from ooni.managers import ReportEntryManager, MeasurementManager
 from ooni.reporter import Report
-from ooni.utils import log
+from ooni.utils import log, checkForRoot, NotRootError
+from ooni.utils.net import randomFreePort
 from ooni.nettest import NetTest
+from ooni.errors import UnableToStartTor
+
+from txtorcon import TorConfig
+from txtorcon import TorState, launch_tor
+
+from twisted.internet import defer, reactor
 
 class Director(object):
     """
@@ -161,3 +170,102 @@ class Director(object):
         net_test.done.addBoth(self.netTestDone, net_test)
         return net_test.done
 
+    def startSniffing(self):
+        """ Start sniffing with Scapy. Exits if required privileges (root) are not
+        available.
+        """
+        from ooni.utils.txscapy import ScapyFactory, ScapySniffer
+        try:
+            checkForRoot()
+        except NotRootError:
+            print "[!] Includepcap options requires root priviledges to run"
+            print "    you should run ooniprobe as root or disable the options in ooniprobe.conf"
+            sys.exit(1)
+
+        print "Starting sniffer"
+        config.scapyFactory = ScapyFactory(config.advanced.interface)
+
+        if os.path.exists(config.reports.pcap):
+            print "Report PCAP already exists with filename %s" % config.reports.pcap
+            print "Renaming files with such name..."
+            pushFilenameStack(config.reports.pcap)
+
+        sniffer = ScapySniffer(config.reports.pcap)
+        config.scapyFactory.registerProtocol(sniffer)
+
+
+    def startTor(self):
+        """ Starts Tor
+        Launches a Tor with :param: socks_port :param: control_port
+        :param: tor_binary set in ooniprobe.conf
+        """
+        @defer.inlineCallbacks
+        def state_complete(state):
+            config.tor_state = state
+            log.msg("Successfully bootstrapped Tor")
+            log.debug("We now have the following circuits: ")
+            for circuit in state.circuits.values():
+                log.debug(" * %s" % circuit)
+
+            socks_port = yield state.protocol.get_conf("SocksPort")
+            control_port = yield state.protocol.get_conf("ControlPort")
+            client_ip = yield state.protocol.get_info("address")
+
+            config.tor.socks_port = int(socks_port.values()[0])
+            config.tor.control_port = int(control_port.values()[0])
+
+            config.probe_ip = client_ip.values()[0]
+
+            log.debug("Obtained our IP address from a Tor Relay %s" % config.privacy.client_ip)
+
+        def setup_failed(failure):
+            log.exception(failure)
+            raise UnableToStartTor
+
+        def setup_complete(proto):
+            """
+            Called when we read from stdout that Tor has reached 100%.
+            """
+            log.debug("Building a TorState")
+            state = TorState(proto.tor_protocol)
+            state.post_bootstrap.addCallback(state_complete)
+            state.post_bootstrap.addErrback(setup_failed)
+            return state.post_bootstrap
+
+        def updates(prog, tag, summary):
+            log.debug("%d%%: %s" % (prog, summary))
+
+        tor_config = TorConfig()
+        if config.tor.control_port:
+            tor_config.ControlPort = config.tor.control_port
+        else:
+            control_port = int(randomFreePort())
+            tor_config.ControlPort = control_port
+            config.tor.control_port = control_port
+
+        if config.tor.socks_port:
+            tor_config.SocksPort = config.tor.socks_port
+        else:
+            socks_port = int(randomFreePort())
+            tor_config.SocksPort = socks_port
+            config.tor.socks_port = socks_port
+
+        if config.tor.data_dir:
+            data_dir = os.path.expanduser(config.tor.data_dir)
+
+            if not os.path.exists(data_dir):
+                log.msg("%s does not exist. Creating it." % data_dir)
+                os.makedirs(data_dir)
+            tor_config.DataDirectory = data_dir
+
+        tor_config.save()
+
+        log.debug("Setting control port as %s" % tor_config.ControlPort)
+        log.debug("Setting SOCKS port as %s" % tor_config.SocksPort)
+
+        d = launch_tor(tor_config, reactor,
+                tor_binary=config.advanced.tor_binary,
+                progress_updates=updates)
+        d.addCallback(setup_complete)
+        d.addErrback(setup_failed)
+        return d
diff --git a/ooni/errors.py b/ooni/errors.py
index cd4a136..6bb2144 100644
--- a/ooni/errors.py
+++ b/ooni/errors.py
@@ -114,3 +114,8 @@ def failureToString(failure):
 
     return string
 
+class DirectorException(Exception):
+    pass
+
+class UnableToStartTor(DirectorException):
+    pass
diff --git a/ooni/runner.py b/ooni/runner.py
index d56dc26..bf51068 100644
--- a/ooni/runner.py
+++ b/ooni/runner.py
@@ -1,5 +1,4 @@
 import os
-import sys
 import time
 import random
 
@@ -8,18 +7,14 @@ import yaml
 from twisted.internet import defer
 from twisted.internet import reactor
 
-from txtorcon import TorConfig
-from txtorcon import TorState, launch_tor
-
 from ooni import config
 
 from ooni.reporter import OONIBReporter, YAMLReporter, OONIBReportError
 
 from ooni.inputunit import InputUnitFactory
 
-from ooni.utils import log, checkForRoot, pushFilenameStack
-from ooni.utils import NotRootError, Storage
-from ooni.utils.net import randomFreePort
+from ooni.utils import log
+from ooni.utils import Storage
 
 class InvalidResumeFile(Exception):
     pass
@@ -230,108 +225,6 @@ def runTestCases(test_cases, options, cmd_line_options):
         log.exception("Problem in running test")
     yaml_reporter.finish()
 
-class UnableToStartTor(Exception):
-    pass
-
-def startTor():
-    """ Starts Tor
-    Launches a Tor with :param: socks_port :param: control_port
-    :param: tor_binary set in ooniprobe.conf
-    """
-    @defer.inlineCallbacks
-    def state_complete(state):
-        config.tor_state = state
-        log.msg("Successfully bootstrapped Tor")
-        log.debug("We now have the following circuits: ")
-        for circuit in state.circuits.values():
-            log.debug(" * %s" % circuit)
-
-        socks_port = yield state.protocol.get_conf("SocksPort")
-        control_port = yield state.protocol.get_conf("ControlPort")
-        client_ip = yield state.protocol.get_info("address")
-
-        config.tor.socks_port = int(socks_port.values()[0])
-        config.tor.control_port = int(control_port.values()[0])
-
-        config.probe_ip = client_ip.values()[0]
-
-        log.debug("Obtained our IP address from a Tor Relay %s" % config.privacy.client_ip)
-
-    def setup_failed(failure):
-        log.exception(failure)
-        raise UnableToStartTor
-
-    def setup_complete(proto):
-        """
-        Called when we read from stdout that Tor has reached 100%.
-        """
-        log.debug("Building a TorState")
-        state = TorState(proto.tor_protocol)
-        state.post_bootstrap.addCallback(state_complete)
-        state.post_bootstrap.addErrback(setup_failed)
-        return state.post_bootstrap
-
-    def updates(prog, tag, summary):
-        log.debug("%d%%: %s" % (prog, summary))
-
-    tor_config = TorConfig()
-    if config.tor.control_port:
-        tor_config.ControlPort = config.tor.control_port
-    else:
-        control_port = int(randomFreePort())
-        tor_config.ControlPort = control_port
-        config.tor.control_port = control_port
-
-    if config.tor.socks_port:
-        tor_config.SocksPort = config.tor.socks_port
-    else:
-        socks_port = int(randomFreePort())
-        tor_config.SocksPort = socks_port
-        config.tor.socks_port = socks_port
-
-    if config.tor.data_dir:
-        data_dir = os.path.expanduser(config.tor.data_dir)
-
-        if not os.path.exists(data_dir):
-            log.msg("%s does not exist. Creating it." % data_dir)
-            os.makedirs(data_dir)
-        tor_config.DataDirectory = data_dir
-
-    tor_config.save()
-
-    log.debug("Setting control port as %s" % tor_config.ControlPort)
-    log.debug("Setting SOCKS port as %s" % tor_config.SocksPort)
-
-    d = launch_tor(tor_config, reactor,
-            tor_binary=config.advanced.tor_binary,
-            progress_updates=updates)
-    d.addCallback(setup_complete)
-    d.addErrback(setup_failed)
-    return d
-
-def startSniffing():
-    """ Start sniffing with Scapy. Exits if required privileges (root) are not
-    available.
-    """
-    from ooni.utils.txscapy import ScapyFactory, ScapySniffer
-    try:
-        checkForRoot()
-    except NotRootError:
-        print "[!] Includepcap options requires root priviledges to run"
-        print "    you should run ooniprobe as root or disable the options in ooniprobe.conf"
-        sys.exit(1)
-
-    print "Starting sniffer"
-    config.scapyFactory = ScapyFactory(config.advanced.interface)
-
-    if os.path.exists(config.reports.pcap):
-        print "Report PCAP already exists with filename %s" % config.reports.pcap
-        print "Renaming files with such name..."
-        pushFilenameStack(config.reports.pcap)
-
-    sniffer = ScapySniffer(config.reports.pcap)
-    config.scapyFactory.registerProtocol(sniffer)
-
 def loadTest(cmd_line_options):
     """
     Takes care of parsing test command line arguments and loading their





More information about the tor-commits mailing list