可以指定dns查询,脱离本地dns设置。
import socket,os,re
def dns_remote_resolve(qname, dnsserver, timeout=None, blacklist=set(), max_retry=2, max_wait=2):
for i in xrange(max_retry):
index = os.urandom(2)
host = ''.join(chr(len(x))+x for x in qname.split('.'))
data = '%s\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00%s\x00\x00\x01\x00\x01' % (index, host)
address_family = socket.AF_INET6 if ':' in dnsserver else socket.AF_INET
sock = None
try:
sock = socket.socket(family=address_family, type=socket.SOCK_DGRAM)
if isinstance(timeout, (int, long)):
sock.settimeout(timeout)
sock.sendto(data, (dnsserver, 53))
for i in xrange(max_wait):
data = sock.recv(512)
iplist