refactor(main): 优化 DNS 查询报文构建函数

- 为 build_dns_query 函数添加了文档字符串,明确了函数的功能、参数和返回值类型
- 优化了代码注释,详细解释了 DNS 查询报文各部分的构建过程
- 在关键步骤添加了额外的注释,以提高代码的可读性和可维护性
This commit is contained in:
fly6516 2025-01-08 14:49:13 +08:00
parent 84cb0c5854
commit 7243851f9e

17
main.py
View File

@ -196,6 +196,15 @@ def calculate_checksum(data):
# 构造 DNS 查询报文
def build_dns_query(domain):
"""
构建DNS查询报文
Args:
domain (str): 需要查询的域名
Returns:
bytes: 构建的DNS查询报文
"""
# DNS请求报文头部
transaction_id = random.randint(0, 65535) # 随机生成事务ID
flags = 0x0100 # 标志字段(标准查询请求)
@ -204,13 +213,14 @@ def build_dns_query(domain):
authority_rrs = 0 # 权威记录数
additional_rrs = 0 # 附加记录数
# DNS报文头部
# DNS报文头部各个字段打包成二进制数据
header = struct.pack('>HHHHHH', transaction_id, flags, questions, answer_rrs, authority_rrs, additional_rrs)
# 域名部分(查询问题)
domain_parts = domain.split('.')
query = b''
for part in domain_parts:
# 每个域名部分前添加其长度,并将域名部分转换为字节串
query += struct.pack('B', len(part)) + part.encode()
query += b'\0' # 域名结束符
@ -219,9 +229,10 @@ def build_dns_query(domain):
# 查询类 (IN: 1)
query_class = 1
# 完整的查询报文
# 将查询类型和查询类打包到查询报文中
# 完整的查询报文由头部、域名部分和查询类型、查询类组成
query_packet = header + query + struct.pack('>HH', query_type, query_class)
return query_packet
# 解析 DNS 响应报文