2011-10-05 25 views
3

我需要小型嗅探器,因此我使用C#和SharpPcap。如何使用SharpPcap從TCPPacket獲取數據?

packet = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data); 
tcpPacket = TcpPacket.GetEncapsulated(packet); 

我有原始數據包與所有數據包數據。然後,我通過一些信息(例如源/目標/協議/等等)將數據包從其中取出。之後,我得到了tcp數據包。

現在我怎樣才能得到軟件發送/接收的實際數據包數據?

回答

8

很簡單。

packet.PayloadPacket.PayloadPacket.PayloadData 
+0

你是我心目中的英雄:)) –

3

tcpPacket.PayloadData或PayloadPacket應該是你想要的。如果Packet.Net不知道如何將數據解析爲子數據包,則PayloadData有效,如果PayloadPack有效,則PayloadPack有效。我不確定今天發生了任何tcp數據包解析,所以你應該安全地說tcpPacket.PayloadData。

也許api應該改變,使得PayloadData始終是tcp數據包中的原始數據,並且PayloadPacket爲空或非空,具體取決於數據包的內容是否被解析。然後你可以通過使用PayloadData獲取任何數據包,以太網,IP等內容。思考?

可能指的是'包'的嵌套PayloadPacket,但很難知道數據包是如何構造的。它是以太網 - > IP-> Tcp還是有以太網數據包的包裝?通過TcpPacket.GetEncapsulated(),可以爲您處理這些情況。

克里斯

SharpPcap的作者/ Packet.Net

相關問題