2010-08-17 86 views
1

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

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

+0

请参阅http://pcapdotnet.codeplex.com/Thread/View.aspx?ThreadId=223803 – brickner 2010-08-22 09:15:36

+0

中的讨论DNS解析器正在为SharpPcap开发。为所有用例动态解析问题/答案可能变得非常多毛,但它在不久的将来会出现在待办事项列表中。 – 2011-02-28 12:28:52

+0

Evan - 对于古代线程的复兴感到遗憾,但是SharpPcap的DNS解析器是否完成?我正在寻找使用SharpPcap/Packet.Net解析DNS请求和响应数据包,但在最新的下载(或在网络上)中没有找到。谢谢! – 2013-08-18 00:58:36

回答

2

是的,这是可能的。

示例代码将是对长边位,但...

从本质上说,您需要:

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

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

在实践中,这意味着:

  1. 忽略请求 - 所有你需要的信息是在响应(QR == 1
  2. 检查RCODE == 0ANCOUNT > 0
  3. 看在问题节找到被查询的名称
  4. 寻找答案答案(duh!)

为了进一步复杂化,你必须处理DNS标签(系列<count><data...>领域),并可能过于处理压缩标签事宜!

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

+0

非常好 - 谢谢Alnitak,如果可以的话,今天我会给出这个答案 – Greg 2010-08-17 21:00:52

+0

Alnitak - 我正在设法接收UDP数据包,但是我不太确定如何从PcapDotNet.Packets.Transport中分解出来.UdpDatagram对象级别进一步?这里有一个快照,我可以在VS2010中看到postimage.org/image.php?v=aV7un3J。我想手动解析“((packet.Ethernet.IpV4.Udp).Payload).Buffer”值例如? – Greg 2010-08-19 10:07:54

+0

nb:不正确的编辑我的英国英文拼写还原... – Alnitak 2010-08-21 14:31:03