refactor(main): 优化 DNS 查询报文构建函数
- 为 build_dns_query 函数添加了文档字符串,明确了函数的功能、参数和返回值类型 - 优化了代码注释,详细解释了 DNS 查询报文各部分的构建过程 - 在关键步骤添加了额外的注释,以提高代码的可读性和可维护性
This commit is contained in:
parent
84cb0c5854
commit
7243851f9e
17
main.py
17
main.py
@ -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 响应报文
|
||||
|
Loading…
Reference in New Issue
Block a user