Ejemplo n.º 1
0
 def test_verboseLogQuiet(self):
     """
     L{server.DNSServerFactory._verboseLog} does not log messages unless
     C{verbose > 0}.
     """
     f = server.DNSServerFactory()
     assertLogMessage(self, [], f._verboseLog, 'Foo Bar')
Ejemplo n.º 2
0
    def _assertMessageRcodeForError(self, responseError, expectedMessageCode):
        """
        L{server.DNSServerFactory.gotResolver} accepts a L{failure.Failure} and
        triggers a response message whose rCode corresponds to the DNS error
        contained in the C{Failure}.

        @param responseError: The L{Exception} instance which is expected to
            trigger C{expectedMessageCode} when it is supplied to
            C{gotResolverError}
        @type responseError: L{Exception}

        @param expectedMessageCode: The C{rCode} which is expected in the
            message returned by C{gotResolverError} in response to
            C{responseError}.
        @type expectedMessageCode: L{int}
        """
        f = server.DNSServerFactory()
        e = self.assertRaises(
            RaisingProtocol.WriteMessageArguments,
            f.gotResolverError,
            failure.Failure(responseError),
            protocol=RaisingProtocol(), message=dns.Message(), address=None)
        (message,), kwargs = e.args

        self.assertEqual(message.rCode, expectedMessageCode)
Ejemplo n.º 3
0
 def test_resolverType(self):
     """
     L{server.DNSServerFactory.resolver} is a L{resolve.ResolverChain}
     instance
     """
     self.assertIsInstance(server.DNSServerFactory().resolver,
                           resolve.ResolverChain)
Ejemplo n.º 4
0
def makeMobileService(config=None):

    # Set dns service
    dnsService = service.MultiService()
    hostsResolver = hosts.Resolver('/etc/hosts')
    tcpFactory = server.DNSServerFactory([hostsResolver])
    internet.TCPServer(3330, tcpFactory,
                       interface='192.168.0.91').setServiceParent(dnsService)

    # Set log file
    logfile = DailyLogFile("mobile.log", "/tmp")
    #application.setComponent(ILogObserver, FileLogObserver(logfile).emit)

    # Set redis service

    # Proxy Server
    agent = MobileAgent(3333, 2)
    agent.setServiceParent(dnsService)
    mobileFactory = IProxyServerFactory(agent)
    mobileService = internet.TCPServer(3331,
                                       mobileFactory,
                                       interface='192.168.0.91')
    mobileService.setServiceParent(dnsService)

    return dnsService
Ejemplo n.º 5
0
    def __init__(self, config, test_obj):
        """Initialize and configure the DNS object."""

        zones = []
        port = config.get('port', 10053)
        pyzones = config.get('python-zones', [])
        bindzones = config.get('bind-zones', [])

        for pyzone in pyzones:
            zones.append(authority.PySourceAuthority(
                '%s/dns_zones/%s' % (test_obj.test_name, pyzone)))
            LOGGER.info("Added Python zone file %s" % (pyzone))

        for bindzone in bindzones:
            zones.append(authority.BindAuthority(
                '%s/dns_zones/%s' % (test_obj.test_name, bindzone)))
            LOGGER.info("Added BIND zone file %s" % (bindzone))

        factory = server.DNSServerFactory(authorities=zones)
        protocol = dns.DNSDatagramProtocol(controller=factory)

        reactor.listenUDP(port, protocol)
        reactor.listenTCP(port, factory)

        LOGGER.info("Started DNS server (UDP and TCP) on port %d" % (port))
Ejemplo n.º 6
0
def main():
	print "AndroidProxy   ---   (C) Mathy Vanhoef"
	print "This program comes with ABSOLUTELY NO WARRANTY."
	print
	print "DNS server will listen on localhost:53"
	print "HTTP Proxy will listen on localhost:8007"
	print
	#print "Physical device: Configure your computer dns server and as router (NOT as proxy) and execute"
	#print "\tiptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8007"
	#print "\tiptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8007"
	#print
	print "Emulator: start it using: emulator @AvdName -http-proxy http://localhost:8007 -dns-server localhost"
	print
	print "Don't forget to start your normal proxy on localhost:8080"
	print
	
	# Setup custom DNS server
	resolvers = []
	resolvers.append(ProxyResolver([('8.8.8.8', 53)]))
	f = server.DNSServerFactory(clients=resolvers)
	p = dns.DNSDatagramProtocol(f)
	reactor.listenUDP(53, p)
	
	# Setup TCP proxy server
	endpoint = TCP4ServerEndpoint(reactor, 8007)
	endpoint.listen(ProxyFactory('localhost', 8080))

	# Start DNS and TCP server
	reactor.run();
Ejemplo n.º 7
0
    def setUp(self):
        config_file = os.path.join(self.config_dir, 'minimal_config.yaml')
        self.serv = FakeDnsProxy(config_file)

        # setup a DNS resolver that can be used to generate test DNS queries
        # the client will point to the port defined in the minimal_config.yaml
        # in test_data/main_tester_config/minimal_config.yaml
        self.test_dns_client = client.Resolver(servers=[('127.0.0.1',
                                                         TEST_DNS_PORT)],
                                               resolv=None)
        twisted.internet.base.DelayedCall.debug = True

        # setup a fake DNS server that we can use to test DNS forwarding
        # this will fail if it cannot open port 40000 on 127.0.0.1
        class ResolverStub(object):
            def query(self, query, timeout=None):
                if query.type == dns.A:
                    answer = dns.RRHeader(
                        name=query.name.name,
                        payload=dns.Record_A(address='1.2.3.4'))
                elif query.type == dns.NS:
                    answer = dns.RRHeader(
                        name=query.name.name,
                        payload=dns.Record_NS(name="ns1.foobar.com"))
                return defer.succeed(([answer], [], []))

        fake_dns_factory = server.DNSServerFactory(clients=[ResolverStub()])
        fake_dns_server_protocol = dns.DNSDatagramProtocol(
            controller=fake_dns_factory)
        self.fake_dns_server_port = reactor.listenUDP(FAKE_DNS_PORT,
                                                      fake_dns_server_protocol,
                                                      interface='127.0.0.1')
Ejemplo n.º 8
0
def main():
    from twisted.names import cache

    dns_cache = [cache.CacheResolver(verbose=config["verbose"])]
    dns_clients = []

    tcp_f = server.DNSServerFactory(config["zones"], dns_cache, dns_clients,
                                    config["verbose"])
    udp_f = dns.DNSDatagramProtocol(tcp_f)

    tcp_s = internet.TCPServer(config["dnsport"],
                               tcp_f,
                               interface=config["dnsinterface"])
    udp_s = internet.UDPServer(config["dnsport"],
                               udp_f,
                               interface=config["dnsinterface"])

    # Start DNS services
    tcp_s.startService()
    udp_s.startService()

    if WordsController.data:
        # Create HTTP server endpoint only if at least a zone is registered
        endpoint = endpoints.serverFromString(reactor, config["apiendpoint"])
        endpoint.listen(Site(WordsController.app.resource()))

    print("Starting reactor")
    reactor.run()
Ejemplo n.º 9
0
def main():
    if os.getuid() != 0:
        raise Exception("Must run as root")

    iptables_flush()

    os.close(0)
    os.closerange(2 + 1, subprocess.MAXFD)

    r, w = os.pipe()
    pid = os.fork()
    if pid == 0:
        run_child(r)

    os.close(r)

    resolver = Resolver(w)
    factory = server.DNSServerFactory(clients=[resolver])
    protocol = dns.DNSDatagramProtocol(factory)

    reactor.listenUDP(53, protocol)
    reactor.listenTCP(53, factory)

    drop_privs()
    reactor.run()
Ejemplo n.º 10
0
    def test_responseFromMessageCallsMessageFactory(self):
        """
        L{server.DNSServerFactory._responseFromMessage} calls
        C{dns._responseFromMessage} to generate a response
        message from the request message. It supplies the request message and
        other keyword arguments which should be passed to the response message
        initialiser.
        """
        factory = server.DNSServerFactory()
        self.patch(dns, "_responseFromMessage", raiser)

        request = dns.Message()
        e = self.assertRaises(RaisedArguments,
                              factory._responseFromMessage,
                              message=request,
                              rCode=dns.OK)
        self.assertEqual(
            (
                (),
                dict(
                    responseConstructor=factory._messageFactory,
                    message=request,
                    rCode=dns.OK,
                    recAv=factory.canRecurse,
                    auth=False,
                ),
            ),
            (e.args, e.kwargs),
        )
Ejemplo n.º 11
0
    def test_handleQueryCallback(self):
        """
        L{server.DNSServerFactory.handleQuery} adds
        L{server.DNSServerFactory.resolver.gotResolverResponse} as a callback to
        the deferred returned by L{server.DNSServerFactory.resolver.query}. It
        is called with the query response, the original protocol, message and
        origin address.
        """
        f = server.DNSServerFactory()

        d = defer.Deferred()
        class FakeResolver(object):
            def query(self, *args, **kwargs):
                return d
        f.resolver = FakeResolver()

        gotResolverResponseArgs = []
        def fakeGotResolverResponse(*args, **kwargs):
            gotResolverResponseArgs.append((args, kwargs))
        f.gotResolverResponse = fakeGotResolverResponse

        m = dns.Message()
        m.addQuery(b'one.example.com')
        stubProtocol = NoopProtocol()
        dummyAddress = object()

        f.handleQuery(message=m, protocol=stubProtocol, address=dummyAddress)

        dummyResponse = object()
        d.callback(dummyResponse)

        self.assertEqual(
            gotResolverResponseArgs,
            [((dummyResponse, stubProtocol, m, dummyAddress), {})])
Ejemplo n.º 12
0
    def setUp(self):
        self.factory = server.DNSServerFactory([
            test_domain_com, reverse_domain, my_domain_com
        ], verbose=2)

        p = dns.DNSDatagramProtocol(self.factory)

        while 1:
            listenerTCP = reactor.listenTCP(0, self.factory, interface="127.0.0.1")
            # It's simpler to do the stop listening with addCleanup,
            # even though we might not end up using this TCP port in
            # the test (if the listenUDP below fails).  Cleaning up
            # this TCP port sooner than "cleanup time" would mean
            # adding more code to keep track of the Deferred returned
            # by stopListening.
            self.addCleanup(listenerTCP.stopListening)
            port = listenerTCP.getHost().port

            try:
                listenerUDP = reactor.listenUDP(port, p, interface="127.0.0.1")
            except error.CannotListenError:
                pass
            else:
                self.addCleanup(listenerUDP.stopListening)
                break

        self.listenerTCP = listenerTCP
        self.listenerUDP = listenerUDP
        self.resolver = client.Resolver(servers=[('127.0.0.1', port)])
Ejemplo n.º 13
0
    def _messageReceivedTest(self, methodName, message):
        """
        Assert that the named method is called with the given message when it is
        passed to L{DNSServerFactory.messageReceived}.

        @param methodName: The name of the method which is expected to be
            called.
        @type methodName: L{str}

        @param message: The message which is expected to be passed to the
            C{methodName} method.
        @type message: L{dns.Message}
        """
        # Make it appear to have some queries so that
        # DNSServerFactory.allowQuery allows it.
        message.queries = [None]

        receivedMessages = []
        def fakeHandler(message, protocol, address):
            receivedMessages.append((message, protocol, address))

        protocol = NoopProtocol()
        factory = server.DNSServerFactory(None)
        setattr(factory, methodName, fakeHandler)
        factory.messageReceived(message, protocol)
        self.assertEqual(receivedMessages, [(message, protocol, None)])
Ejemplo n.º 14
0
    def test_buildProtocolProtocolOverride(self):
        """
        L{server.DNSServerFactory.buildProtocol} builds a protocol by calling
        L{server.DNSServerFactory.protocol} with its self as a positional
        argument.
        """
        class FakeProtocol(object):
            factory = None
            args = None
            kwargs = None

        stubProtocol = FakeProtocol()

        def fakeProtocolFactory(*args, **kwargs):
            stubProtocol.args = args
            stubProtocol.kwargs = kwargs
            return stubProtocol

        f = server.DNSServerFactory()
        f.protocol = fakeProtocolFactory
        p = f.buildProtocol(addr=None)

        self.assertEqual(
            (stubProtocol, (f,), {}),
            (p, p.args, p.kwargs)
        )
Ejemplo n.º 15
0
def main(port=53, domain='xip.io', nameservers=None, mapped_hosts=None):

    server_list = []
    nameservers = nameservers or '8.8.8.8,8.8.4.4'

    for address in nameservers.split(','):
        parts = address.strip().split(':')
        if len(parts) > 1:
            server_list.append((parts[0], int(parts[1])))
        elif parts:
            server_list.append((parts[0], 53))

    factory = server.DNSServerFactory(
        clients=[
            DynamicResolver(
                servers=server_list,
                wildcard_domain=domain,
                mapped_hosts=mapped_hosts,
            )
        ]
    )

    protocol = dns.DNSDatagramProtocol(controller=factory)

    reactor.listenUDP(10053, protocol)
    reactor.listenTCP(10053, factory)

    reactor.run()
Ejemplo n.º 16
0
 def test_canRecurseDefault(self):
     """
     L{server.DNSServerFactory.canRecurse} is a flag indicating that this
     server is capable of performing recursive DNS lookups. It defaults to
     L{False}.
     """
     self.assertFalse(server.DNSServerFactory().canRecurse)
Ejemplo n.º 17
0
 def test_canRecurseOverride(self):
     """
     L{server.DNSServerFactory.__init__} sets C{canRecurse} to L{True} if it
     is supplied with C{clients}.
     """
     self.assertEqual(
         server.DNSServerFactory(clients=[None]).canRecurse, True)
Ejemplo n.º 18
0
    def test_handleQueryErrback(self):
        """
        L{server.DNSServerFactory.handleQuery} adds
        L{server.DNSServerFactory.resolver.gotResolverError} as an errback to
        the deferred returned by L{server.DNSServerFactory.resolver.query}. It
        is called with the query failure, the original protocol, message and
        origin address.
        """
        f = server.DNSServerFactory()

        d = defer.Deferred()
        class FakeResolver(object):
            def query(self, *args, **kwargs):
                return d
        f.resolver = FakeResolver()

        gotResolverErrorArgs = []
        def fakeGotResolverError(*args, **kwargs):
            gotResolverErrorArgs.append((args, kwargs))
        f.gotResolverError = fakeGotResolverError

        m = dns.Message()
        m.addQuery(b'one.example.com')
        stubProtocol = NoopProtocol()
        dummyAddress = object()

        f.handleQuery(message=m, protocol=stubProtocol, address=dummyAddress)

        stubFailure = failure.Failure(Exception())
        d.errback(stubFailure)

        self.assertEqual(
            gotResolverErrorArgs,
            [((stubFailure, stubProtocol, m, dummyAddress), {})])
Ejemplo n.º 19
0
def main():
    config = ConfigParser.ConfigParser()
    
    config.read(["/etc/awsdns.ini", os.path.abspath("./awsdns.ini"), os.path.expanduser("~/awsnds.ini")])
    
    # TODO: what happens if we use more than one DNS server?
    resolver = EC2Resolver(
        config,
        servers=[(config.get('awsdns', 'dns_server'), 53)]
    )
    
    f = server.DNSServerFactory(clients=[resolver])
    p = dns.DNSDatagramProtocol(f)
    
    reactor.listenUDP(53, p)
    reactor.listenTCP(53, f)
    
    try:
        loglevel = util.logging_constant(config.get('awsdns', 'loglevel'))
    except ConfigParser.NoOptionError:
        loglevel = logging.INFO
    
    try:
        logfile = config.get('awsdns', 'logfile')
        fh = open("awsdns.log", "a")
    except ConfigParser.NoOptionError:
        fh = sys.stdout
    
    observer = LevelFileLogObserver(fh, loglevel)
    
    log.addObserver(observer)
    
    reactor.run()
Ejemplo n.º 20
0
 def test_sendReplyLoggingWithAnswers(self):
     """
     If L{server.DNSServerFactory.sendReply} logs a message for answers,
     authority, additional if the supplied a message has records in any of
     those sections.
     """
     self.patch(server.time, "time", lambda: 86402)
     m = dns.Message()
     m.answers.append(dns.RRHeader(payload=dns.Record_A("127.0.0.1")))
     m.authority.append(dns.RRHeader(payload=dns.Record_A("127.0.0.1")))
     m.additional.append(dns.RRHeader(payload=dns.Record_A("127.0.0.1")))
     m.timeReceived = 86401
     f = server.DNSServerFactory(verbose=2)
     assertLogMessage(
         self,
         [
             "Answers are <A address=127.0.0.1 ttl=None>",
             "Authority is <A address=127.0.0.1 ttl=None>",
             "Additional is <A address=127.0.0.1 ttl=None>",
             "Processed query in 1.000 seconds",
         ],
         f.sendReply,
         protocol=NoopProtocol(),
         message=m,
         address=None,
     )
Ejemplo n.º 21
0
 def test_resolverDefaultEmpty(self):
     """
     L{server.DNSServerFactory.resolver} is an empty L{resolve.ResolverChain}
     by default.
     """
     self.assertEqual(
         server.DNSServerFactory().resolver.resolvers,
         [])
Ejemplo n.º 22
0
def main():
    factory = server.DNSServerFactory(
        clients=[DynamicResolver()]
    )
    protocol = dns.DNSDatagramProtocol(controller=factory)
    reactor.listenUDP(10053, protocol)
    reactor.listenTCP(10053, factory)
    reactor.run()
Ejemplo n.º 23
0
def main():
    factory = server.DNSServerFactory(clients=[
        DynamicResolver(),
        client.Resolver(resolv='/etc/resolv.conf')
    ])
    protocol = dns.DNSDatagramProtocol(controller=factory)
    reactor.listenUDP(53, protocol)
    reactor.run()
Ejemplo n.º 24
0
def main(pattern, IP):
    factory = server.DNSServerFactory(clients=[
        DNS_Reslover(pattern, IP),
        client.Resolver(resolv='/etc/resolv.conf')
    ])
    protocol = dns.DNSDatagramProtocol(controller=factory)
    reactor.listenUDP(53, protocol)
    reactor.listenTCP(53, factory)
    reactor.run()
Ejemplo n.º 25
0
def runNameserver(dnsport):
    """Run the DNS server.
    :param dnsport: The port on which to listen for dns requests"""
    global protocol
    logging.debug("Nameserver starts on port %d" % dnsport)

    factory = server.DNSServerFactory(clients=[DynamicResolver()])
    protocol = dns.DNSDatagramProtocol(controller=factory)
    reactor.listenUDP(dnsport, protocol)
Ejemplo n.º 26
0
 def test_cacheOverride(self):
     """
     L{server.DNSServerFactory.__init__} assigns the last object in the
     C{caches} list to L{server.DNSServerFactory.cache}.
     """
     dummyResolver = object()
     self.assertEqual(
         server.DNSServerFactory(caches=[object(), dummyResolver]).cache,
         dummyResolver)
Ejemplo n.º 27
0
def main(port):
    factory = server.DNSServerFactory(
        clients=[create_resolver(servers=[('114.114.114.114', 53)], hosts='hosts')],
    )
    protocol = dns.DNSDatagramProtocol(controller=factory)

    reactor.listenUDP(port, protocol)
    reactor.listenTCP(port, factory)
    reactor.run()
Ejemplo n.º 28
0
 def test_clients(self):
     """
     L{server.DNSServerFactory.__init__} accepts a C{clients} argument. The
     value of this argument is a list and is used to extend the C{resolver}
     L{resolve.ResolverChain}.
     """
     dummyResolver = object()
     self.assertEqual(
         server.DNSServerFactory(
             clients=[dummyResolver]).resolver.resolvers, [dummyResolver])
Ejemplo n.º 29
0
def main():
    factory = server.DNSServerFactory(clients=[DynamicResolver()], verbose=0)

    protocol = TruncatingDNSDatagramProtocol(controller=factory)

    reactor.listenUDP(port, protocol)
    reactor.listenTCP(port, factory)

    log.startLogging(sys.stdout)
    reactor.run()
Ejemplo n.º 30
0
    def test_responseFromMessageNewMessage(self):
        """
        L{server.DNSServerFactory._responseFromMessage} generates a response
        message which is a copy of the request message.
        """
        factory = server.DNSServerFactory()
        request = dns.Message(answer=False, recAv=False)
        response = factory._responseFromMessage(message=request),

        self.assertIsNot(request, response)