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
Należy użyć bibliotekę wtykowego http://docs.python.org/2/library/socket.html
wywołanie funkcji systemowej nie jest dobrą praktyką w tym przypadku.
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
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))
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!
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']
Musiałem wyśledzić rekordy w AWS Route 53 przy użyciu CNAMES. AKA messaging.myCompany.com
do moreSpecificMessaging.myCompanyInternal.com
Używam również Socket, ale innej raczej ukrytej metody.
import socket
addr1 = socket.gethostbyname_ex('google.com')
print(addr1)
https://docs.python.org/3/library/socket.html#socket.gethostbyname_ex
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