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 响应报文