From 7243851f9ea01cb586da379852d34f92ef105f1d Mon Sep 17 00:00:00 2001 From: fly6516 Date: Wed, 8 Jan 2025 14:49:13 +0800 Subject: [PATCH] =?UTF-8?q?refactor(main):=20=E4=BC=98=E5=8C=96=20DNS=20?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=8A=A5=E6=96=87=E6=9E=84=E5=BB=BA=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 为 build_dns_query 函数添加了文档字符串,明确了函数的功能、参数和返回值类型 - 优化了代码注释,详细解释了 DNS 查询报文各部分的构建过程 - 在关键步骤添加了额外的注释,以提高代码的可读性和可维护性 --- main.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/main.py b/main.py index 6aab217..f34ccf2 100644 --- a/main.py +++ b/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 响应报文