c# - 使用 PcapDotNet,如何提取最终的有效负载?

标签 c# pcap.net

我有一个 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 可用于解析、显示或以其他方式使用有效负载。

关于c# - 使用 PcapDotNet,如何提取最终的有效负载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44825933/

相关文章:

c# - 尽管功能设置正确,DllImport __Internal 仍无法正常工作

c# - 在异步方法中使用锁

c# - 将字节数组转换为托管结构

c# - 无法加载文件或程序集 'PcapDotNet.Core.dll'

c# - 在 Pcap.NET 中创建有效的 TCP 连接

c# - 生产中用于 PDF 生成的 LaTeX

c# - 如何以编程方式在声音和静音模式之间切换?

c# - 如何对列表进行分组,以便使用 Linq 检索日期时间字段上一天的单个记录?

wpf - 类成员定义为静态或非静态时的行为不同

c# - PCAP 库功能(编写新的 PCAP 文件)