DNS数据包的格式如下:
- import socket
-
- def handle_query(client_socket, query):
- print("Received query:", query)
- 回答 = b'\x00\x01\x00\x00\x01\x00\x00\x00\x00\x01\x03www\x06google\x03com\x00\x00\x51\x01\x00\x01\xc0\x0c\x00\x01\x00\x01'
- client_socket.send(回答)
- client_socket.close()
-
- def main():
- server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- server_socket.bind(('127.0.0.1', 53))
- while True:
- data, addr = server_socket.recvfrom(1024)
- handle_query(server_socket.sendto(data, addr), data)
-
- if __name__ == '__main__':
- main()
该代码创建了一个UDP套接字,绑定到本地IP地址127.0.0.1和端口53,这是DNS服务器的标准端口。然后它进入一个无限循环,等待来自客户端的DNS查询请求。一旦收到请求,它将调用handle_query函数来处理查询,并使用预定义的回答响应客户端。如果需要支持更多的域名或更复杂的查询类型,可以扩展handle_query函数来解析和回答查询请求。