Existe-t-il un module python qui répète les mêmes tâches que nslookup? Je sais que je peux utiliser os.sys pour appeler nslookup, mais je me demande s’il existe déjà un module python pour cela . Merci d’avance!
J'utilise le code suivant:
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))
Vous devez utiliser DNSPython
import dns.resolver
answers = dns.resolver.query('dnspython.org', 'MX')
for rdata in answers:
print 'Host', rdata.exchange, 'has preference', rdata.preference
Vous devriez utiliser socket library http://docs.python.org/2/library/socket.html
L'appel de fonction système n'est pas une bonne pratique dans ce cas.
le problème est que socket.gethostbyname () ne renvoie qu'une seule adresse IP. nslookup en renvoie autant qu'il a . J'utilise:
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
il va imprimer:
['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']
Notez que socket.getfqdn()
peut renvoyer le nom complet d'un nom d'hôte. Voir: http://docs.python.org/2/library/socket.html?highlight=socket.getaddrinfo#socket.getfqdn
Par exemple:
python -c 'import socket; print(socket.gethostname()); print(socket.getfqdn());'
myserver
myserver.mydomain.local
Mais le résultat dépend de la configuration /etc/hosts
. Si tu as:
$ cat /etc/hosts
127.0.0.1 myserver localhost.localdomain localhost
Le résultat de socket.getfqdn()
sera:
python -c 'import socket; print(socket.getfqdn());'
localhost.localdomain
Oups! Pour résoudre ce problème, la seule solution que je connaisse consiste à modifier le /etc/hosts
comme suit:
$ cat /etc/hosts
127.0.0.1 myserver myserver.mydomain.local localhost.localdomain localhost
J'espère que ça aide!
Je devais localiser les enregistrements A dans AWS Route 53 à l'aide de CNames. AKA messaging.myCompany.com
à moreSpecificMessaging.myCompanyInternal.com
J'utilise aussi Socket, mais une autre méthode plutôt cachée.
import socket
addr1 = socket.gethostbyname_ex('google.com')
print(addr1)
https://docs.python.org/3/library/socket.html#socket.gethostbyname_ex
Les réponses précédentes sont correctes, mais voici ce que je voudrais utiliser socket , il "donne accès à l’interface de socket BSD. Il est disponible sur tous les systèmes Unix modernes, Windows, MacOS et probablement sur d’autres plateformes."
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)
Si nslookup ou Dig ne sont pas installés sur le système, j'utilise les éléments suivants pour une utilisation interactive, sortie de recherche dns compatible nslookup
import socket,argparse
def main(args):
fqdn = args.fqdn
try:
ip_addr = socket.gethostbyname(fqdn)
server_info()
print 'Name: ' + fqdn
print 'Address: ' + ip_addr
except socket.gaierror:
server_info()
print "** server can't find {0}: NXDOMAIN".format(fqdn)
def server_info():
lines = [line.rstrip('\n') for line in open('/etc/resolv.conf')]
for line in lines:
if line.startswith('nameserver'):
print 'Server:\t\t' + line.split()[1]
print 'Address:\t' + line.split()[1] + '#53\n'
break
if __== '__main__':
parser = argparse.ArgumentParser(description='Python nslookup utility')
parser.add_argument('fqdn', type=str, help='Fully qualified domain name')
args = parser.parse_args()
main(args)