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()
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
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")
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
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")
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)
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:
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.")
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.")