python dns协议重写

来源:互联网 发布:win7如何禁止安装软件 编辑:程序博客网 时间:2024/05/16 07:48

可以指定dns查询,脱离本地dns设置。

import socket,os,redef 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 = ['.'.join(str(ord(x)) for x in s) for s in re.findall('\xc0.\x00\x01\x00\x01.{6}(.{4})', data) if all(ord(x)<=255 for x in s)]                    iplist = [x for x in iplist if x not in blacklist]                    if iplist:                        return iplist            except socket.error as e:                if e[0] in (10060, 'timed out'):                    continue            except Exception, e:                raise            finally:                if sock:                    sock.close()print dns_remote_resolve('www.baidu.com','8.8.8.8')


原创粉丝点击