Example #1
0
    def launchClient(self, name, managedInfo):
        """
        Launch a client of transport 'name' using the environment
        information in 'managedInfo'.

        Return a tuple (<ok>, (<addr>, <port>)), where <ok> is whether
        the function was successful, and (<addr>, <port> is a tuple
        representing where we managed to bind.
        """

        clientClass = transports.get_transport_class_from_name_and_mode(
            name, 'client')
        if not clientClass:
            log.error("Could not find transport class for '%s' (%s)." %
                      (name, 'client'))
            return False, None

        factory = socks.SOCKSv4Factory(clientClass())

        try:
            addrport = reactor.listenTCP(0, factory, interface='localhost')
        except error.CannotListenError:
            log.error("Could not set up a client listener.")
            return False, None

        return True, (addrport.getHost().host, addrport.getHost().port)
Example #2
0
    def launchServer(self, name, bindaddr, managedInfo):
        """
        Launch a client of transport 'name' using the environment
        information in 'managedInfo'.

        Return a tuple (<ok>, (<addr>, <port>)), where <ok> is whether
        the function was successful, and (<addr>, <port> is a tuple
        representing where we managed to bind.
        """

        serverClass = transports.get_transport_class_from_name_and_mode(
            name, 'server')
        if not serverClass:
            log.error("Could not find transport class for '%s' (%s)." %
                      (name, 'server'))
            return False, None

        factory = network.StaticDestinationServerFactory(
            managedInfo['orport'], 'server', serverClass())

        try:
            addrport = reactor.listenTCP(int(bindaddr[1]), factory)
        except CannotListenError:
            log.error("Could not set up a listener for TCP port '%s'." %
                      bindaddr[1])
            return False, None

        return True, (addrport.getHost().host, addrport.getHost().port)
Example #3
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)

    transportClass = transports.get_transport_class_from_name_and_mode(args.name, args.mode)
    if (transportClass is None):
        log.error("Transport class was not found for '%s' in mode '%s'" % (args.name, args.mode))
        sys.exit(1)

    # XXX functionify
    import obfsproxy.network.network as network
    import obfsproxy.network.socks as socks
    from twisted.internet import reactor, error, address, tcp

    if (args.mode == 'client') or (args.mode == 'server'):
        factory = network.StaticDestinationServerFactory(args.dest, args.mode, transportClass())
    elif args.mode == 'socks':
        factory = socks.SOCKSv4Factory(transportClass())

    reactor.listenTCP(int(args.listen_addr[1]), factory)
    reactor.run()
Example #4
0
    def launchClient(self, name, managedInfo):
        """
        Launch a client of transport 'name' using the environment
        information in 'managedInfo'.

        Return a tuple (<ok>, (<addr>, <port>)), where <ok> is whether
        the function was successful, and (<addr>, <port> is a tuple
        representing where we managed to bind.
        """

        clientClass = transports.get_transport_class_from_name_and_mode(name, 'client')
        if not clientClass:
            log.error("Could not find transport class for '%s' (%s)." % (name, 'client'))
            return False, None

        factory = socks.SOCKSv4Factory(clientClass())

        try:
            addrport = reactor.listenTCP(0, factory, interface='localhost')
        except error.CannotListenError:
            log.error("Could not set up a client listener.")
            return False, None

        return True, (addrport.getHost().host, addrport.getHost().port)
Example #5
0
    def launchServer(self, name, bindaddr, managedInfo):
        """
        Launch a client of transport 'name' using the environment
        information in 'managedInfo'.

        Return a tuple (<ok>, (<addr>, <port>)), where <ok> is whether
        the function was successful, and (<addr>, <port> is a tuple
        representing where we managed to bind.
        """

        serverClass = transports.get_transport_class_from_name_and_mode(name, 'server')
        if not serverClass:
            log.error("Could not find transport class for '%s' (%s)." % (name, 'server'))
            return False, None

        factory = network.StaticDestinationServerFactory(managedInfo['orport'], 'server', serverClass())

        try:
            addrport = reactor.listenTCP(int(bindaddr[1]), factory)
        except CannotListenError:
            log.error("Could not set up a listener for TCP port '%s'." % bindaddr[1])
            return False, None

        return True, (addrport.getHost().host, addrport.getHost().port)