python module - módulo de python para nslookup
python-module (7)
¿Hay algún módulo de Python que haga lo mismo que nslookup? Estoy planeando usar nslookup para obtener información sobre el dominio de una URL que se desechará. Sé que puedo usar os.sys para llamar a nslookup pero me pregunto si ya hay un módulo python para esto. ¡Gracias por adelantado!
Debe usar la biblioteca de sockets http://docs.python.org/2/library/socket.html
La llamada a la función del sistema no es una buena práctica en este caso.
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))
Las respuestas anteriores son correctas, pero esto es lo que usaría socket , que "proporciona acceso a la interfaz de socket BSD. Está disponible en todos los sistemas Unix modernos, Windows, MacOS y, probablemente, en plataformas adicionales".
import socket
distinct_ips = []
# 0,0,0,0 is for (family, type, proto, canonname, sockaddr)
#change some_site.com to whatever your are looking up of course
socket_info = socket.getaddrinfo("some_site.com",0,0,0,0)
for result in socket_info:
ns_ip = result[4][0]
if distinct_ips.count(ns_ip)==0:
distinct_ips.append(ns_ip)
print(ns_ip)
Necesitaba rastrear los registros A en AWS Route 53 usando CNames. AKA messaging.myCompany.com
a moreSpecificMessaging.myCompanyInternal.com
También uso Socket, pero otro método más bien oculto.
import socket
addr1 = socket.gethostbyname_ex(''google.com'')
print(addr1)
https://docs.python.org/3/library/socket.html#socket.gethostbyname_ex
Necesitas usar DNSPython
import dns.resolver
answers = dns.resolver.query(''dnspython.org'', ''MX'')
for rdata in answers:
print ''Host'', rdata.exchange, ''has preference'', rdata.preference
Tenga en cuenta que socket.getfqdn()
puede devolver el nombre completo de un nombre de host. Consulte: 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 de /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 resolverlo, la única solución que conozco es cambiar el /etc/hosts
siguiente manera:
$ cat /etc/hosts
127.0.0.1 myserver myserver.mydomain.local localhost.localdomain localhost
¡Espero eso ayude!
el problema es que socket.gethostbyname () devuelve solo una dirección ip. nslookup devuelve tantos como tiene. Yo suelo:
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'']