使用 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

在 PcapDotNet 中自动选择设备?

思维探索者:让记忆与学习更有效率

如何从 XML 中仅提取标签名称(而不是值),最终使用 XPath

有没有办法实时从UDP数据包中提取有效负载并将该有效负载用于其他应用程序?

使用ffmpeg从视频中提取最终帧