refactor(main): 优化 DNS 查询报文构建函数
- 为 build_dns_query 函数添加了文档字符串,明确了函数的功能、参数和返回值类型 - 优化了代码注释,详细解释了 DNS 查询报文各部分的构建过程 - 在关键步骤添加了额外的注释,以提高代码的可读性和可维护性
This commit is contained in:
parent
84cb0c5854
commit
7243851f9e
15
main.py
15
main.py
@ -196,6 +196,15 @@ def calculate_checksum(data):
|
|||||||
|
|
||||||
# 构造 DNS 查询报文
|
# 构造 DNS 查询报文
|
||||||
def build_dns_query(domain):
|
def build_dns_query(domain):
|
||||||
|
"""
|
||||||
|
构建DNS查询报文。
|
||||||
|
|
||||||
|
Args:
|
||||||
|
domain (str): 需要查询的域名。
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bytes: 构建的DNS查询报文。
|
||||||
|
"""
|
||||||
# DNS请求报文头部
|
# DNS请求报文头部
|
||||||
transaction_id = random.randint(0, 65535) # 随机生成事务ID
|
transaction_id = random.randint(0, 65535) # 随机生成事务ID
|
||||||
flags = 0x0100 # 标志字段(标准查询请求)
|
flags = 0x0100 # 标志字段(标准查询请求)
|
||||||
@ -204,13 +213,14 @@ def build_dns_query(domain):
|
|||||||
authority_rrs = 0 # 权威记录数
|
authority_rrs = 0 # 权威记录数
|
||||||
additional_rrs = 0 # 附加记录数
|
additional_rrs = 0 # 附加记录数
|
||||||
|
|
||||||
# DNS报文头部
|
# 将DNS报文头部各个字段打包成二进制数据
|
||||||
header = struct.pack('>HHHHHH', transaction_id, flags, questions, answer_rrs, authority_rrs, additional_rrs)
|
header = struct.pack('>HHHHHH', transaction_id, flags, questions, answer_rrs, authority_rrs, additional_rrs)
|
||||||
|
|
||||||
# 域名部分(查询问题)
|
# 域名部分(查询问题)
|
||||||
domain_parts = domain.split('.')
|
domain_parts = domain.split('.')
|
||||||
query = b''
|
query = b''
|
||||||
for part in domain_parts:
|
for part in domain_parts:
|
||||||
|
# 每个域名部分前添加其长度,并将域名部分转换为字节串
|
||||||
query += struct.pack('B', len(part)) + part.encode()
|
query += struct.pack('B', len(part)) + part.encode()
|
||||||
query += b'\0' # 域名结束符
|
query += b'\0' # 域名结束符
|
||||||
|
|
||||||
@ -219,7 +229,8 @@ def build_dns_query(domain):
|
|||||||
# 查询类 (IN: 1)
|
# 查询类 (IN: 1)
|
||||||
query_class = 1
|
query_class = 1
|
||||||
|
|
||||||
# 完整的查询报文
|
# 将查询类型和查询类打包到查询报文中
|
||||||
|
# 完整的查询报文由头部、域名部分和查询类型、查询类组成
|
||||||
query_packet = header + query + struct.pack('>HH', query_type, query_class)
|
query_packet = header + query + struct.pack('>HH', query_type, query_class)
|
||||||
|
|
||||||
return query_packet
|
return query_packet
|
||||||
|
Loading…
Reference in New Issue
Block a user