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
Sie sollten Socket-Bibliothek http://docs.python.org/2/library/socket.html
Systemfunktionsaufruf verwenden, ist keine gute Praxis in diesem Fall.
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
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))
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!
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']
Ich brauchte 53 mit CNAMEs A-Datensätze in AWS Weg aufzuspüren. AKA messaging.myCompany.com
zu moreSpecificMessaging.myCompanyInternal.com
Ich benutze auch Socket, aber eine andere ziemlich versteckte Methode.
import socket
addr1 = socket.gethostbyname_ex('google.com')
print(addr1)
https://docs.python.org/3/library/socket.html#socket.gethostbyname_ex
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