如何使用SharpPcap从TCPPacket获取数据?

时间:2011-10-05 00:43:17

标签: c# packet-sniffers sharppcap

我的报告需要小嗅探器,所以我选择了C#和SharpPcap。

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

我有包含所有数据包数据的原始数据包。然后我用一些信息,如源/目的地/协议/等获取Packet。之后我得到了tcp数据包。

现在我如何才能获得软件发送/接收的实际数据包数据?

2 个答案:

答案 0 :(得分:8)

很简单。

packet.PayloadPacket.PayloadPacket.PayloadData

答案 1 :(得分:3)

tcpPacket.PayloadData或PayloadPacket应该是你想要的。如果Packet.Net不知道如何将数据解析为子数据包,则PayloadData有效,如果有,则PayloadPacket有效。我不确定今天是否有任何tcp数据包解析,所以你应该安全地说tcpPacket.PayloadData。

可能应该更改api,使得PayloadData始终是tcp数据包中的原始数据,PayloadPacket为null或非null,具体取决于是否解析了数据包的内容。然后,您可以使用PayloadData获取任何数据包,以太网,IP等的内容。想法?

可以引用一些嵌套的'packet'的PayloadPacket,但是很难知道数据包的构造方式。它是Ethernet-> IP-> Tcp还是有以太网数据包的包装?使用TcpPacket.GetEncapsulated()可以为您处理这些情况。

克里斯

SharpPcap / Packet.Net的作者