1

Q1 - 是否可以使用库捕获 DNS 请求/响应?

Q2 - 如果是,一旦我收到数据包,是否有人有任何示例代码显示我如何从 DNS 响应中提取字段?特别是 DNS 为特别提供的给定 DNS 名称解析的 IP 地址。

4

1 回答 1

3

是的,这是可能的。

示例代码会有点长,不过......

本质上,您需要:

  1. 提取以太网标头
  2. 提取IP头
  3. 提取 UDP 标头 [假设数据包没有分段,或使用 TCP]
  4. 提取 DNS 有效负载

然后根据RFC 1035中给出的非常详尽的描述处理数据包的其余部分。

在实践中,这意味着:

  1. 忽略请求 - 您需要的所有信息都在响应中 ( QR == 1)
  2. 检查RCODE == 0ANCOUNT > 0
  3. 在“问题”部分中查找被查询的名称
  4. 在答案(duh!) 部分中寻找答案

更复杂的是,您必须处理 DNS 标签(一系列<count><data...>字段)并可能还处理压缩标签!

这听起来很讨厌,但实际上都没有那么难。我有 C++ 代码可以完成所有这些工作,而且时间不长,但我无法发布它。

于 2010-08-17T19:33:37.693 回答