2011-10-05 114 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

相关问题