2012-09-06 10 views
15

Czy istnieje moduł-python, który robi to samo, co robi nslookup? Mam zamiar użyć nslookup do wykopywania niektórych informacji dotyczących domeny URL, który ma zostać złomowany. Wiem, że mogę użyć os.sys, aby zadzwonić do nslookup, ale zastanawiam się, czy jest już python-moduł dla tego. Z góry dziękuję!moduł python dla nslookup

Odpowiedz

12

Trzeba użyć DNSPython

import dns.resolver 

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

używam następujący kod:

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

Zauważ, że socket.getfqdn() może wrócić pełną kwalifikowaną nazwę hosta. Zobacz: http://docs.python.org/2/library/socket.html?highlight=socket.getaddrinfo#socket.getfqdn

Na przykład:

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

Ale wynik zależy od konfiguracji /etc/hosts. Jeśli masz:

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

Wynik socket.getfqdn() będą:

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

Oooops! Aby rozwiązać, że jedynym rozwiązaniem wiem jest zmiana /etc/hosts następująco:

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

Nadzieję, że to pomaga!

+0

Chociaż prawdziwe i dokładne, to patrzy lokalnych systemów męska hostname/FQDN. OP zapytał, jak wyszukać zewnętrzne nazwy DNS dla skrobania witryny. Nadal +1 dla informacji. – VooDooNOFX

5

Problem polega na tym, że socket.gethostbyname() zwraca tylko jeden adres IP. nslookup zwraca tyle, ile ma. używam:

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 

zostanie wydrukowana:

['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']