2012-09-06 272 views
15

是否有一个python模块与nslookup做同样的事情? 我打算使用nslookup挖掘一些关于要废弃的URL的域的信息。我知道我可以使用os.sys来调用nslookup,但我只是想知道是否有一个python模块。 在此先感谢!nslookup的python模块

回答

12

您需要使用DNSPython

import dns.resolver 

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

我用下面的代码:

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

注意socket.getfqdn()可以返回主机名的全限定名称。请参阅:http://docs.python.org/2/library/socket.html?highlight=socket.getaddrinfo#socket.getfqdn

例如:

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

但结果取决于/etc/hosts配置。如果您有:

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

socket.getfqdn()结果将是:

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

Oooops!为了解决这个问题,我所知道的唯一的解决办法是改变/etc/hosts如下:

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

希望它能帮助!

+0

虽然真正的,彻底的,这种查找本地系统的主机名/ FQDN。 OP询问如何查找外部DNS名称以进行网站搜索。信息仍为+1。 – VooDooNOFX

5

问题是,socket.gethostbyname()只返回一个IP地址。 nslookup会返回尽可能多的返回值。 我使用:

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 

它将打印:

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