2012-09-06 6 views
15

Gibt es ein Python-Modul, das die gleichen Sachen macht wie nslookup? Ich plane, nslookup zu verwenden, um einige Informationen bezüglich der Domäne einer zu verschrottenden URL zu graben. Ich weiß, dass ich os.sys verwenden kann, um nslookup aufzurufen, aber ich frage mich, ob es bereits ein Python-Modul dafür gibt. Vielen Dank im Voraus!Python-Modul für nslookup

Antwort

12

Sie benötigen DNSPython

import dns.resolver 

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

verwende ich den folgenden Code bin mit:

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

Beachten Sie, dass socket.getfqdn() den vollen qualifizierten Namen eines Hostnamen zurückgeben kann. Siehe: http://docs.python.org/2/library/socket.html?highlight=socket.getaddrinfo#socket.getfqdn

Zum Beispiel:

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

Aber das Ergebnis hängt die /etc/hosts Konfiguration. Wenn Sie:

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

Das Ergebnis socket.getfqdn() wird:

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

Oooops! Zu lösen, ist die einzige Lösung, die ich kenne die /etc/hosts wie folgt zu ändern:

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

Hoffe, es hilft!

+0

Während wahr und gründlich, sieht dies die lokalen Systeme Hostnamen/fqdn auf. Das OP fragte, wie man nach externen DNS-Namen für das Scraping von Websites sucht. Noch +1 für die Info. – VooDooNOFX

5

Das Problem ist, dass socket.Gethostbyname() nur eine IP-Adresse zurückgibt. nslookup gibt so viele zurück, wie es ist. Ich benutze:

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 

es gedruckt wird:

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