5

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

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

我有包含所有数据包数据的原始数据包。然后我用一些信息(如源/目标/协议/等)从中取出 Packet。之后我得到了 tcp 数据包。

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

4

2 回答 2

10

很简单。

packet.PayloadPacket.PayloadPacket.PayloadData
于 2011-10-05T01:33:06.857 回答
3

tcpPacket.PayloadData 或 PayloadPacket 应该是你想要的。如果 Packet.Net 不知道如何将数据解析为子数据包,则 PayloadData 有效,如果知道,则 PayloadPacket 有效。我不确定今天是否发生任何 tcp 数据包解析,因此您应该放心地说 tcpPacket.PayloadData。

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

可以参考“数据包”的一些嵌套 PayloadPacket,但很难知道数据包是如何构造的。是以太网->IP->Tcp 还是以太网数据包周围有包装器?使用 TcpPacket.GetEncapsulated() 可以为您处理这些情况。

克里斯

SharpPcap/Packet.Net 的作者

于 2011-10-05T13:54:11.617 回答