我的报告需要小嗅探器,所以我选择了C#和SharpPcap。
packet = Packet.ParsePacket(rawCapture.LinkLayerType, rawCapture.Data);
tcpPacket = TcpPacket.GetEncapsulated(packet);
我有包含所有数据包数据的原始数据包。然后我用一些信息,如源/目的地/协议/等获取Packet。之后我得到了tcp数据包。
现在我如何才能获得软件发送/接收的实际数据包数据?
答案 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的作者