Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python3中创建带有网站阻止的DNS服务器?_Python 3.x_Networking_Dns - Fatal编程技术网

Python 3.x 在Python3中创建带有网站阻止的DNS服务器?

Python 3.x 在Python3中创建带有网站阻止的DNS服务器?,python-3.x,networking,dns,Python 3.x,Networking,Dns,我可以使用python3创建一个DNS服务器来阻止/重定向某些网站URL吗? 我尝试过使用dnslib,但似乎无法阻止URL 我试图创建一个程序,可以阻止在DNS级别的网站,我知道pi洞,但我想创建我自己的 迄今为止我的代码(修改后的示例代码): #-*-编码:utf-8-*- """ InterceptResolver-对上游服务器的代理请求 (可选拦截) """ 来自未来导入打印功能 导入binascii、副本、套接字、结构、系统 从dnslib导入DNSRecord、RR、QTYPE、RC

我可以使用python3创建一个DNS服务器来阻止/重定向某些网站URL吗? 我尝试过使用dnslib,但似乎无法阻止URL

我试图创建一个程序,可以阻止在DNS级别的网站,我知道pi洞,但我想创建我自己的

迄今为止我的代码(修改后的示例代码):

#-*-编码:utf-8-*-
"""
InterceptResolver-对上游服务器的代理请求
(可选拦截)
"""
来自未来导入打印功能
导入binascii、副本、套接字、结构、系统
从dnslib导入DNSRecord、RR、QTYPE、RCODE、解析时间
从dnslib.server导入DNSServer、DNSHandler、BaseResolver、DNSLogger
从dnslib.label导入DNSLabel
类侦听器解析程序(BaseResolver):
"""
截取解析器
对上游服务器的代理请求(可选地拦截请求)
匹配本地记录
"""
定义初始化(self、地址、端口、ttl、拦截、跳过、nxdomain、转发、所有类型,超时=0):
"""
地址/端口-上游服务器
ttl-截取记录的默认ttl
intercept-要响应的通配符RRs列表(区域格式)
skip-要跳过的通配符标签列表
nxdomain-返回nxdomain的通配符标签列表
转发-要转发的通配符标签列表
all_qtypes-如果qname匹配,则截取所有qtypes。
超时-上游服务器的超时
"""
self.address=地址
self.port=端口
self.ttl=解析时间(ttl)
self.skip=跳过
self.nxdomain=nxdomain
self.forward=[]
对于我在前进:
qname,3;,upstream=i.partition(“:”)
上游_ip,u,上游_端口=upstream.partition(“:”)
self.forward.append((qname、上游_-ip、int(上游_-port或'53'))
self.all\u qtypes=所有类型
self.timeout=超时
self.zone=[]
对于截取中的i:
如果i=='-':
i=sys.stdin.read()
对于rr.fromZone中的rr(i,ttl=self.ttl):
self.zone.append((rr.rname,QTYPE[rr.rtype],rr))
def解析(自我、请求、处理程序):
匹配=错误
reply=request.reply()
qname=request.q.qname
qtype=qtype[request.q.qtype]
#尝试在本地解析,除非在跳过列表中
如果没有([self.skip中的s的qname.matchGlob]):
对于self.zone中的name、rtype、rr:
如果qname.matchGlob(名称):
如果qtype in(rtype、'ANY'、'CNAME'):
a=复制。复制(rr)
a、 rname=qname
答复.添加答复(a)
匹配=真
#检查NXDOMAIN
如果有([self.nxdomain中s的qname.matchGlob]):
reply.header.rcode=getattr(rcode,'NXDOMAIN')
回覆
如果匹配并自行选择所有类型:
回覆
#否则,首先检查转发,然后检查上游。
上游,上游\端口=自地址,自端口
如果没有([self.skip中的s的qname.matchGlob]):
对于self.forward中的名称、ip、端口:
如果qname.matchGlob(名称):
上游,上游\端口=ip,端口
如果没有,请回复.rr:
尝试:
如果handler.protocol==“udp”:
proxy\u r=请求.发送(上游,上游\u端口,
超时=自身。超时)
其他:
proxy\u r=请求.发送(上游,上游\u端口,
tcp=True,timeout=self.timeout)
reply=DNSRecord.parse(代理服务器)
除socket.timeout外:
reply.header.rcode=getattr(rcode,'SERVFAIL')
回覆
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
导入argparse、sys、time
p=argparse.ArgumentParser(description=“DNS拦截代理”)
p、 添加参数(“--port”,“-p”,type=int,default=53,
metavar=“”,
help=“本地代理端口(默认值:53)”)
p、 添加参数(“--address”,“-a”,默认值=”,
metavar=“”,
help=“本地代理侦听地址(默认值:全部)”)
p、 添加_参数(“--upstream”、“-u”,default=“8.8.8.8:53”,
metavar=“”,
help=“上游DNS服务器:端口(默认值:8.8.8.8:53)”
p、 添加参数(“--intercept”,“-i”,action=“append”,
metavar=“”,
help=“拦截与区域记录(glob)匹配的请求”('-'表示标准输入)”
p、 添加参数(“--skip”、“-s”、action=“append”,
metavar=“”,
help=“不截取匹配的标签(glob)”)
p、 添加参数(“--nxdomain”,“-x”,action=“append”,
metavar=“”,
help=“返回域(全局)”)
p、 添加参数(“--forward”、“-f”、action=“append”,
metavar=“”,
help=“将匹配标签(glob)的请求转发到dns服务器”)
p、 添加参数(“--ttl”,“-t”,default=“60s”,
metavar=“”,
help=“拦截TTL(默认值:60s)”)
p、 添加参数(“--timeout”,“-o”,type=float,default=5,
metavar=“”,
help=“上游超时(默认值:5s)”)
p、 添加参数(“--all qtypes”,action='store\u true',default=False,
help=“如果qname匹配,则返回空响应,但qtype不匹配”)
p、 添加参数(“--log”,default=“请求、答复、截断、错误”,
help=“要启用的日志挂钩(默认值:+request、+reply、+truncated、+error、-recv、-send、-data)”)
p、 添加参数(“--log prefix”,action='store_true',default=False,
help=“日志前缀(时间戳/处理程序/解析器)(默认值:False)”)
args=p.parse_arg