2010-08-17 127 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