def dns_A_resolve (addr, resolve): "resolve asynchronously a named address to a numeric one" def resolved (request): if request.dns_resources: resolve ((request.dns_resources[0], addr[1])) else: resolve (None) dns_client.lookup ((addr[0], 'A'), resolved)
def dns_A_resolve(addr, resolve): "resolve asynchronously a named address to a numeric one" def resolved(request): if request.dns_resources: resolve((request.dns_resources[0], addr[1])) else: resolve(None) dns_client.lookup((addr[0], 'A'), resolved)
def dns_PTR_resolve(addr, resolve): "resolve asynchronously an numeric IP address to a named one" def resolved(request): if request.dns_resources: resolve((request.dns_resources[0], addr[1])) else: resolve(None) dns_client.lookup((ip_peer.in_addr_arpa(addr[0]), 'PTR'), resolved)
def dns_PTR_resolve (addr, resolve): "resolve asynchronously an numeric IP address to a named one" def resolved (request): if request.dns_resources: resolve ((request.dns_resources[0], addr[1])) else: resolve (None) dns_client.lookup (( ip_peer.in_addr_arpa (addr[0]), 'PTR' ), resolved)
def connect(domain): dispatcher = Pipeline() def resolve(request): if not request.dns_resources: return dispatcher.mx_records = request.dns_resources[:] # copy! tcp_client.connect(dispatcher, (dispatcher.mx_records.pop(0), 25)) dns_client.lookup((domain, 'MX'), resolve) return dispatcher
def connect (domain): dispatcher = Pipeline () def resolve (request): if not request.dns_resources: return dispatcher.mx_records = request.dns_resources[:] # copy! tcp_client.connect ( dispatcher, (dispatcher.mx_records.pop (0), 25) ) dns_client.lookup ((domain, 'MX'), resolve) return dispatcher
def resolve_PTR(request): if request.dns_resources: name = request.dns_resources[0] def resolve_A(request): if (request.dns_resources and request.dns_resources[0] == addr[0]): resolve((name, addr[1])) else: resolve(None) dns_client.lookup((name, 'A'), resolve_A) else: resolve(None)
def resolve_PTR (request): if request.dns_resources: name = request.dns_resources[0] def resolve_A (request): if ( request.dns_resources and request.dns_resources[0] == addr[0] ): resolve ((name, addr[1])) else: resolve (None) dns_client.lookup ((name, 'A'), resolve_A) else: resolve (None)
def dns_double_lookup(addr, resolve): "resolve the name of a numeric IP address if it is reversed" def resolve_PTR(request): if request.dns_resources: name = request.dns_resources[0] def resolve_A(request): if (request.dns_resources and request.dns_resources[0] == addr[0]): resolve((name, addr[1])) else: resolve(None) dns_client.lookup((name, 'A'), resolve_A) else: resolve(None) dns_client.lookup((ip_peer.in_addr_arpa(addr[0]), 'PTR'), resolve_PTR)
def dns_double_lookup (addr, resolve): "resolve the name of a numeric IP address if it is reversed" def resolve_PTR (request): if request.dns_resources: name = request.dns_resources[0] def resolve_A (request): if ( request.dns_resources and request.dns_resources[0] == addr[0] ): resolve ((name, addr[1])) else: resolve (None) dns_client.lookup ((name, 'A'), resolve_A) else: resolve (None) dns_client.lookup (( ip_peer.in_addr_arpa (addr[0]), 'PTR' ), resolve_PTR)
def test_lookup(info): def resolved(request): loginfo.log('%r' % (request.__dict__, ), info) # lookup A, MX, NS and PTR resource records dns_client.lookup(('www.google.be', 'A'), resolved) dns_client.lookup(('google.be', 'MX'), resolved) dns_client.lookup(('google.be', 'NS'), resolved) dns_client.lookup(('215.247.47.195.in-addr.arpa', 'PTR'), resolved) # lookup the same question twice dns_client.lookup(('www.google.be', 'A'), resolved) # try an error dns_client.lookup(('www.google', 'A'), resolved) # and failing server/IP addresses dns_client.lookup(('www.google.com', 'A'), resolved, ( '192.168.1.3', 'not-a-valid-IP-address', '192.168.1.1', ))
) sys.exit (1) servers = None if len (sys.argv) > 2: question = tuple (sys.argv[1:3]) if len (sys.argv) > 3: servers = sys.argv[3:] else: question = (sys.argv[1], 'A') def resolved (request): model = list (request.dns_question) if request.dns_resources == None: model.append ('') elif len (request.dns_resources) > 1: model.append (netstring.encode ( request.dns_resources )) elif request.dns_resources: model.append (request.dns_resources[0]) else: model.append ('') model.append (request.dns_peer[0]) loginfo.log (netstring.encode (model)) if question[1] == 'PTR': question = (ip_peer.in_addr_arpa (question[0]), question[1]) dns_client.lookup (question, resolved, servers) async_loop.dispatch () assert None == finalization.collect () sys.exit (0)
def test_lookup (info): def resolved (request): loginfo.log ('%r' % (request.__dict__, ), info) # lookup A, MX, NS and PTR resource records dns_client.lookup (('www.google.be', 'A'), resolved) dns_client.lookup (('google.be', 'MX'), resolved) dns_client.lookup (('google.be', 'NS'), resolved) dns_client.lookup (( '215.247.47.195.in-addr.arpa', 'PTR' ), resolved) # lookup the same question twice dns_client.lookup (('www.google.be', 'A'), resolved) # try an error dns_client.lookup (('www.google', 'A'), resolved) # and failing server/IP addresses dns_client.lookup (('www.google.com', 'A'), resolved, ( '192.168.1.3', 'not-a-valid-IP-address', '192.168.1.1', ))