-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDns_origin.py
78 lines (62 loc) · 2.51 KB
/
Dns_origin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from dnslib import *
from dnslib.server import DNSServer, DNSHandler, BaseResolver
class MyHandler(DNSHandler):
def __init__(self, request, client_address, server):
super().__init__(request, client_address, server)
def handle(self):
# 在这里处理DNS请求的逻辑
data = self.request[0] # 获取请求数据
# 解析DNS请求
request = DNSRecord.parse(data)
qname = request.q.qname
qtype = request.q.qtype
# 打印接收到的DNS请求信息
print(f"Received DNS query for {qname} ({QTYPE[qtype]}) from {self.client_address[0]}")
# 构造DNS响应
reply = request.reply()
# reply = request.reply()
if qtype == QTYPE.A:
# 处理A记录查询
# 在这里添加你的A记录查询逻辑
reply.add_answer(RR(qname, qtype, rdata=A("127.0.0.1")))
elif qtype == QTYPE.AAAA:
# 处理AAAA记录查询
# 在这里添加你的AAAA记录查询逻辑
reply.add_answer(RR(qname, qtype, rdata=AAAA("::1")))
elif qtype == QTYPE.NS:
# 处理NS记录查询
# 在这里添加你的NS记录查询逻辑
reply.add_answer(RR(qname, qtype, rdata=A("ns.example.com")))
pass
elif qtype == QTYPE.CNAME:
# 处理CNAME记录查询
# 在这里添加你的CNAME记录查询逻辑
reply.add_answer(RR(qname, qtype, rdata=A("cname.example.com")))
pass
elif qtype == QTYPE.MX:
# 处理MX记录查询
# 在这里添加你的MX记录查询逻辑
reply.add_answer(RR(qname, qtype, rdata=A("mail.example.com")))
pass
else:
# 对于不支持的查询类型,返回相应的错误响应
reply.header.rcode = RCODE.NXDOMAIN
# 发送DNS响应给客户端
self.send_response(reply)
def send_response(self, reply):
# 将DNS响应发送给客户端
self.server.socket.sendto(reply.pack(), self.client_address)
MyDNSserver = DNSServer(resolver=BaseResolver, handler=MyHandler, port=53, address="0.0.0.0")
if __name__ == '__main__':
try:
print("Starting DNS server...")
print("Starting DNS server successfully.")
MyDNSserver.start()
while True:
pass
except KeyboardInterrupt:
pass
finally:
print("Closing DNS server...")
MyDNSserver.stop()
print("Closing DNS server successfully.")