2012-09-06 33 views
15

nslookup ile aynı şeyi yapan bir python modülü var mı? nslookup'u, hurdaya çıkarılacak bir URL'nin alanıyla ilgili bazı bilgileri kazarak kullanmayı planlıyorum. Nslookup'u çağırmak için os.sys kullanabileceğimi biliyorum, ancak bunun için zaten bir python-modülü olup olmadığını merak ediyorum. Şimdiden teşekkürler! Sen soket kütüphaneye http://docs.python.org/2/library/socket.htmlnslookup için python modülü

Sistem işlev çağrısını kullanmalıdır

cevap

7

bu durumda iyi bir uygulama değildir.

12

Ne Aşağıdaki kodu kullanıyorum DNSPython

import dns.resolver 

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

kullanmak gerekir: socket.getfqdn() hostnameinden tam nitelikli adını dönebilmek

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

Not. Örneğin http://docs.python.org/2/library/socket.html?highlight=socket.getaddrinfo#socket.getfqdn

: Bkz

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

Ama sonuç /etc/hosts yapılandırmasını bağlıdır. Eğer varsa:

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

socket.getfqdn() sonucu olacaktır:

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

Oooops! Bunu çözmek için bildiğim tek çözüm aşağıdaki gibi /etc/hosts değiştirmektir:

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

yardımcı olur Umut!

+0

, bu yerel sistemlerin ana bilgisayar adı/FQDN arar. OP, site kazıma için harici dns adlarının nasıl aranacağını sordu. Hala bilgi için +1. – VooDooNOFX

5

sorunu, socket.gethostbyname() öğesinin yalnızca bir IP adresi döndürdüğüdir. nslookup sahip olduğu kadar döndürür. Kullandığım:

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 

o yazdırır:

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

Ben CNAME'ler kullanarak AWS Rotası 53 A kayıtlarını izini gerekiyordu. AKA messaging.myCompany.com - moreSpecificMessaging.myCompanyInternal.com

Ayrıca Soket'i kullanıyorum, ama başka bir gizli yöntem. doğru ve eksiksiz olsa

import socket 

addr1 = socket.gethostbyname_ex('google.com') 

print(addr1) 

https://docs.python.org/3/library/socket.html#socket.gethostbyname_ex

İlgili konular