Q1 - 是否可以使用库捕获 DNS 请求/响应?
Q2 - 如果是,一旦我收到数据包,是否有人有任何示例代码显示我如何从 DNS 响应中提取字段?特别是 DNS 为特别提供的给定 DNS 名称解析的 IP 地址。
是的,这是可能的。
示例代码会有点长,不过......
本质上,您需要:
然后根据RFC 1035中给出的非常详尽的描述处理数据包的其余部分。
在实践中,这意味着:
QR == 1
)RCODE == 0
和ANCOUNT > 0
更复杂的是,您必须处理 DNS 标签(一系列<count><data...>
字段)并可能还处理压缩标签!
这听起来很讨厌,但实际上都没有那么难。我有 C++ 代码可以完成所有这些工作,而且时间不长,但我无法发布它。