2012-09-06 25 views
15

¿Hay un módulo python que haga lo mismo que nslookup? Estoy planeando utilizar nslookup para buscar información sobre el dominio de una URL que se eliminará. Sé que puedo usar os.sys para llamar a nslookup pero me pregunto si ya hay un módulo de python para esto. ¡Gracias de antemano!módulo python para nslookup

Respuesta

12

Es necesario utilizar DNSPython

import dns.resolver 

answers = dns.resolver.query('dnspython.org', 'MX') 
for rdata in answers: 
    print 'Host', rdata.exchange, 'has preference', rdata.preference 
14

estoy usando el siguiente código:

import socket 

ip_list = [] 
ais = socket.getaddrinfo("www.yahoo.com",0,0,0,0) 
for result in ais: 
    ip_list.append(result[-1][0]) 
ip_list = list(set(ip_list)) 
5

Tenga en cuenta que socket.getfqdn() puede devolver el nombre calificado completo de un nombre de host. Ver: http://docs.python.org/2/library/socket.html?highlight=socket.getaddrinfo#socket.getfqdn

Por ejemplo:

python -c 'import socket; print(socket.gethostname()); print(socket.getfqdn());' 
myserver 
myserver.mydomain.local 

Pero el resultado depende de la configuración /etc/hosts. Si usted tiene:

$ cat /etc/hosts 
127.0.0.1  myserver localhost.localdomain localhost 

El resultado de socket.getfqdn() será:

python -c 'import socket; print(socket.getfqdn());' 
localhost.localdomain 

Oooops! Para solucionar esto, la única solución que conozco es cambiar la /etc/hosts de la siguiente manera:

$ cat /etc/hosts 
127.0.0.1  myserver myserver.mydomain.local localhost.localdomain localhost 

espero que ayude!

+0

Mientras verdadera y completa, esto mira hacia arriba de los sistemas locales de host/FQDN. El OP preguntó cómo buscar nombres dns externos para raspar el sitio. Todavía +1 para la información. – VooDooNOFX

5

el problema es que socket.gethostbyname() devuelve solo una dirección IP. nslookup devuelve tantos como tiene. que utilizo:

import subprocess 

process = subprocess.Popen(["nslookup", "www.google.com"], stdout=subprocess.PIPE) 
output = process.communicate()[0].split('\n') 

ip_arr = [] 
for data in output: 
    if 'Address' in data: 
     ip_arr.append(data.replace('Address: ','')) 
ip_arr.pop(0) 

print ip_arr 

se imprimirá:

['54.230.228.101', '54.230.228.6', '54.230.228.37', '54.230.228.80', '54.230.228.41', '54.230.228.114', '54.230.228.54', '54.230.228.23']