コード例 #1
0
def do_external_mode(args):
    """This function starts obfsproxy's external-mode functionality."""

    assert (args)
    assert (args.name)
    assert (args.name in transports.transports)

    from twisted.internet import reactor

    pt_config = transport_config.TransportConfig()
    pt_config.setStateLocation(args.data_dir)
    pt_config.setListenerMode(args.mode)
    pt_config.setObfsproxyMode("external")
    if args.proxy:  # Set outgoing proxy settings if we have them
        proxy = parseProxyURI(args.proxy)
        pt_config.setProxy(proxy)

    # Run setup() method.
    run_transport_setup(pt_config, args.name)

    launch_transport.launch_transport_listener(args.name, args.listen_addr,
                                               args.mode, args.dest, pt_config,
                                               args.ext_cookie_file)
    log.info("Launched '%s' listener at '%s:%s' for transport '%s'." % \
                 (args.mode, log.safe_addr_str(args.listen_addr[0]), args.listen_addr[1], args.name))
    reactor.run()
コード例 #2
0
 def _build_transport_configuration(self, mode):
     """Configure transport as a managed transport."""
     pt_config = transport_config.TransportConfig()
     pt_config.setStateLocation(const.TEMP_DIR)
     pt_config.setObfsproxyMode("managed")
     pt_config.setListenerMode(mode)
     return pt_config
コード例 #3
0
    def test3_get_public_server_options(self):
        scramblesuit.ScrambleSuitTransport.setup(
            transport_config.TransportConfig())
        options = scramblesuit.ScrambleSuitTransport.get_public_server_options(
            "")
        self.failUnless("password" in options)

        d = {"password": "******"}
        options = scramblesuit.ScrambleSuitTransport.get_public_server_options(
            d)
        self.failUnless("password" in options)
        self.failUnless(
            options["password"] == "3X5BIA2MIHLZ55UV4VAEGKZIQPPZ4QT3")
コード例 #4
0
    def setUp(self):
        config = transport_config.TransportConfig()
        config.state_location = const.STATE_LOCATION
        args = MockArgs()
        suit = scramblesuit.ScrambleSuitTransport
        suit.weAreServer = False

        self.suit = suit
        self.args = args
        self.config = config

        self.validSecret = base64.b32encode('A' * const.SHARED_SECRET_LENGTH)
        self.invalidSecret = 'a' * const.SHARED_SECRET_LENGTH
コード例 #5
0
    def test3_get_public_server_options( self ):
        transCfg = transport_config.TransportConfig()
        transCfg.setStateLocation("/tmp")
        transCfg.setBindAddr(("127.0.0.1", 1234))

        scramblesuit.ScrambleSuitTransport.setup(transCfg)
        options = scramblesuit.ScrambleSuitTransport.get_public_server_options("")
        self.failUnless("password" in options)

        d = { "password": "******" }
        options = scramblesuit.ScrambleSuitTransport.get_public_server_options(d)
        self.failUnless("password" in options)
        self.failUnless(options["password"] == "3X5BIA2MIHLZ55UV4VAEGKZIQPPZ4QT3")
コード例 #6
0
    def setUp(self):
        # Initialize transport object
        pt_config = transport_config.TransportConfig()
        pt_config.setListenerMode("server")
        pt_config.setObfsproxyMode("external")
        wfpad.WFPadClient.setup(pt_config)
        wfpadClient = wfpad.WFPadClient()

        # Create an instace of the shim
        self.shimObs = wfpad_shim.WFPadShimObserver(wfpadClient)

        # Open a few connections
        self.shimObs.onConnect(1)
        self.shimObs.onConnect(2)
        self.shimObs.onConnect(3)
コード例 #7
0
ファイル: server.py プロジェクト: 309972460/software
    except EnvError, err:
        log.warning("Server managed-proxy protocol failed (%s)." % err)
        return

    log.debug("pyptlib gave us the following data:\n'%s'",
              pprint.pformat(ptserver.getDebugData()))

    ext_orport = ptserver.config.getExtendedORPort()
    authcookie = ptserver.config.getAuthCookieFile()
    orport = ptserver.config.getORPort()
    server_transport_options = ptserver.config.getServerTransportOptions()

    for transport, transport_bindaddr in ptserver.getBindAddresses().items():

        # Will hold configuration parameters for the pluggable transport module.
        pt_config = transport_config.TransportConfig()
        pt_config.setStateLocation(ptserver.config.getStateLocation())
        if ext_orport:
            pt_config.setListenerMode("ext_server")
        else:
            pt_config.setListenerMode("server")
        pt_config.setObfsproxyMode("managed")

        transport_options = ""
        if server_transport_options and transport in server_transport_options:
            transport_options = server_transport_options[transport]
            pt_config.setServerTransportOptions(transport_options)

        # Call setup() method for this tranpsort.
        transport_class = transports.get_transport_class(transport, 'server')
        try:
コード例 #8
0
ファイル: server.py プロジェクト: gyohng/obfsproxy
def do_managed_server():
    """Start the managed-proxy protocol as a server."""

    should_start_event_loop = False

    ptserver = ServerTransportPlugin()
    try:
        ptserver.init(transports.transports.keys())
    except EnvError as err:
        log.warning("Server managed-proxy protocol failed (%s)." % err)
        return

    log.debug("pyptlib gave us the following data:\n'%s'",
              pprint.pformat(ptserver.getDebugData()))

    ext_orport = ptserver.config.getExtendedORPort()
    authcookie = ptserver.config.getAuthCookieFile()
    orport = ptserver.config.getORPort()
    server_transport_options = ptserver.config.getServerTransportOptions()

    for transport, transport_bindaddr in ptserver.getBindAddresses().items():

        # Will hold configuration parameters for the pluggable transport module.
        pt_config = transport_config.TransportConfig()
        pt_config.setStateLocation(ptserver.config.getStateLocation())
        if ext_orport:
            pt_config.setListenerMode("ext_server")
        else:
            pt_config.setListenerMode("server")
        pt_config.setObfsproxyMode("managed")

        transport_options = ""
        if server_transport_options and transport in server_transport_options:
            transport_options = server_transport_options[transport]
            pt_config.setServerTransportOptions(transport_options)

        # Call setup() method for this tranpsort.
        transport_class = transports.get_transport_class(transport, 'server')
        try:
            transport_class.setup(pt_config)
        except base.TransportSetupFailed as err:
            log.warning("Transport '%s' failed during setup()." % transport)
            ptserver.reportMethodError(transport,
                                       "setup() failed: %s." % (err))
            continue

        try:
            if ext_orport:
                addrport = launch_transport.launch_transport_listener(
                    transport,
                    transport_bindaddr,
                    'ext_server',
                    ext_orport,
                    pt_config,
                    ext_or_cookie_file=authcookie)
            else:
                addrport = launch_transport.launch_transport_listener(
                    transport, transport_bindaddr, 'server', orport, pt_config)
        except transports.TransportNotFound:
            log.warning("Could not find transport '%s'" % transport)
            ptserver.reportMethodError(transport, "Could not find transport.")
            continue
        except error.CannotListenError as e:
            error_msg = "Could not set up listener (%s:%s) for '%s' (%s)." % \
                        (e.interface, e.port, transport, e.socketError[1])
            log.warning(error_msg)
            ptserver.reportMethodError(transport, error_msg)
            continue

        should_start_event_loop = True

        extra_log = ""  # Include server transport options in the log message if we got 'em
        if transport_options:
            extra_log = " (server transport options: '%s')" % str(
                transport_options)
        log.debug("Successfully launched '%s' at '%s'%s" %
                  (transport, log.safe_addr_str(str(addrport)), extra_log))

        # Invoke the transport-specific get_public_server_options()
        # method to potentially filter the server transport options
        # that should be passed on to Tor and eventually to BridgeDB.
        public_options_dict = transport_class.get_public_server_options(
            transport_options)
        public_options_str = None

        # If the transport filtered its options:
        if public_options_dict:
            optlist = []
            for k, v in public_options_dict.items():
                optlist.append("%s=%s" % (k, v))
            public_options_str = ",".join(optlist)

            log.debug(
                "do_managed_server: sending only public_options to tor: %s" %
                public_options_str)

        # Report success for this transport.
        # If public_options_str is None then all of the
        # transport options from ptserver are used instead.
        ptserver.reportMethodSuccess(transport, addrport, public_options_str)

    ptserver.reportMethodsEnd()

    if should_start_event_loop:
        log.info("Starting up the event loop.")
        reactor.run()
    else:
        log.info("No transports launched. Nothing to do.")
コード例 #9
0
ファイル: client.py プロジェクト: gyohng/obfsproxy
def do_managed_client():
    """Start the managed-proxy protocol as a client."""

    should_start_event_loop = False

    ptclient = ClientTransportPlugin()
    try:
        ptclient.init(transports.transports.keys())
    except EnvError as err:
        log.warning("Client managed-proxy protocol failed (%s)." % err)
        return

    log.debug("pyptlib gave us the following data:\n'%s'", pprint.pformat(ptclient.getDebugData()))

    # Apply the proxy settings if any
    proxy = ptclient.config.getProxy()
    if proxy:
        # Make sure that we have all the necessary dependencies
        try:
            network.ensure_outgoing_proxy_dependencies()
        except network.OutgoingProxyDepsFailure as err:
            ptclient.reportProxyError(str(err))
            return

        ptclient.reportProxySuccess()

    for transport in ptclient.getTransports():

        # Will hold configuration parameters for the pluggable transport module.
        pt_config = transport_config.TransportConfig()
        pt_config.setStateLocation(ptclient.config.getStateLocation())
        pt_config.setListenerMode("socks")
        pt_config.setObfsproxyMode("managed")
        pt_config.setProxy(proxy)

        # Call setup() method for this transport.
        transport_class = transports.get_transport_class(transport, 'socks')
        try:
            transport_class.setup(pt_config)
        except base.TransportSetupFailed as err:
            log.warning("Transport '%s' failed during setup()." % transport)
            ptclient.reportMethodError(transport, "setup() failed: %s." % (err))
            continue

        try:
            addrport = launch_transport.launch_transport_listener(transport, None, 'socks', None, pt_config)
        except transports.TransportNotFound:
            log.warning("Could not find transport '%s'" % transport)
            ptclient.reportMethodError(transport, "Could not find transport.")
            continue
        except error.CannotListenError as e:
            error_msg = "Could not set up listener (%s:%s) for '%s' (%s)." % \
                        (e.interface, e.port, transport, e.socketError[1])
            log.warning(error_msg)
            ptclient.reportMethodError(transport, error_msg)
            continue

        should_start_event_loop = True
        log.debug("Successfully launched '%s' at '%s'" % (transport, log.safe_addr_str(str(addrport))))
        ptclient.reportMethodSuccess(transport, "socks5", addrport, None, None)

    ptclient.reportMethodsEnd()

    if should_start_event_loop:
        log.info("Starting up the event loop.")
        reactor.run()
    else:
        log.info("No transports launched. Nothing to do.")