使用 PcapDotNet,你如何提取最终的有效载荷?
Posted
技术标签:
【中文标题】使用 PcapDotNet,你如何提取最终的有效载荷?【英文标题】:using PcapDotNet, how do you extract the final payload? 【发布时间】:2017-12-03 04:51:06 【问题描述】:我有一个 C# 应用程序,它使用 PcapDotNet 通过捕获过滤器嗅探 UDP 数据包。
工作正常,并且有一个 6 字节的有效负载,但我似乎无法将其提取为字节数组。 UdpDatagram.Payload 是一个数据报,没有提取实际负载数据的方法。
Datagram 有一个 ExtractPayload() 但这给出了一个 ILayer,我似乎无法使用它来获取有效负载。
如何从 TcpDatagram 或 UdpDatagram 中提取最终的有效负载?
【问题讨论】:
【参考方案1】:PacketCommunicator.ReceivePacket() 发送数据包后,使用Datagram.ToMemoryStream() 写入本地缓冲区:
Packet wpacket;
// wpacket = received packet
UdpDatagram udp = null;
TcpDatagram tcp = null;
Datagram datagram = null;
IpV4Datagram ip4 = wpacket.Ethernet.IpV4;
if (ip4.Protocol == IpV4Protocol.Udp)
udp = ip4.Udp;
datagram = udp.Payload;
if (ip4.Protocol == IpV4Protocol.Tcp)
tcp = ip4.Tcp;
datagram = tcp.Payload;
if (null != datagram)
int payloadLength = datagram.Length;
using (MemoryStream ms = datagram.ToMemoryStream())
byte[] rx_payload = new byte[payloadLength];
ms.Read(rx_payload,0, payloadLength);
然后 rx_payload 可用于解析、显示或以其他方式使用有效负载。
【讨论】:
以上是关于使用 PcapDotNet,你如何提取最终的有效载荷?的主要内容,如果未能解决你的问题,请参考以下文章
Pcap .NET 库:找不到 PcapDotNet.Core.DLL
如何从 XML 中仅提取标签名称(而不是值),最终使用 XPath