一个简单的DNS查询功能, 代码如下:
import dns.resolver
def get_hostip(probeDns,host):
try:
myResolver = dns.resolver.Resolver()
i = 0
for dnsip in probeDns.split(','):
myResolver.nameservers[i] = dnsip
i += 1
break
answer = myResolver.query(host)
num = len(answer)
for j in range(num):
LOGGER.info("From host[%s] dns[%s] To ip[%s]" % (host,probeDns,answer[j].address))
return answer[j].address
except Exception,e:
print e
return ""
使用时:
ip = get_hostip("103.78.125.2,103.78.125.34", "www.baidu.com")
print (ip)
一般情况下使用没有问题, 然而, 突然遇到报错list assignment index out of range。 list索引超出范围, 首先确定是哪个list。首先看 myResolver.nameservers, 打印其长度, 为1, 很奇怪。 使用时添加了两个DNS,所以会超出范围。
排除了一些猜测后, 突然想起了/etc/resolv.conf, 里面只配了1个DNS。 添加了一个后, 代码运行正常, myResolver.nameservers 长度为2。 为什么会受到影响, 暂时没去深究,但是代码是需要修改的,以免再次遇到这种问题。