,你如何提取最终的有效载荷?
问题描述:
我有一个C#应用程序,它使用PcapDotNet通过捕获过滤器来嗅探UDP数据包。,你如何提取最终的有效载荷?
工作正常,有一个6字节的有效负载,但我似乎无法将其解压为字节数组。 UdpDatagram.Payload是一个数据报,没有方法来提取实际的有效载荷数据。
Datagram有一个ExtractPayload(),但是这给了一个ILayer,我似乎无法使用它来获得有效载荷。
如何从TcpDatagram或UdpDatagram提取最终有效载荷?
答
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可用于解析,显示或以其他方式使用的有效负载。