如何在.NET中解析UDP数据包?

3
如何在.NET中解析UDP数据包? 我正在使用PCap.Net捕获数据包,其中包括UDP数据包,可以通过(PcapDotNet.packets.Ethernet.IpV4.Udp)从PCap.net对象访问。 如何获取这些结果,即Udp数据包,并进行解析?特别是解开存储在UDP数据包中的DNS请求和响应。是否有一个库可以帮助处理这个问题?
编辑:更具体地说,我想做的是从DNS响应中提取IP地址,并基于Wireshark的检查,可以通过以下方式实现: (a)输入:UDP数据包的有效载荷,它是DNS响应 (b)处理:解析UDP数据包中的DNS响应部分。找到Answers部分,在其中找到类型为A(主机地址)的答案记录[不是CNAME记录],然后获取此答案记录的IP地址。 (c)返回:DNS响应中的IP地址。

WinPCAP不是带有一堆解析器吗? - Will A
@Will - 我能够处理UDP,但我只对携带DNS响应的UDP数据包的详细解析感兴趣。 - Greg
@Amit - 你是在建议我使用PCap.Net进行数据包捕获后,一旦获取了UDP负载,就可以在Microsoft Network Monitor库中使用可用的UDP/DNS解析器吗? - Greg
我已经在你的其他相关问题中给了你很多指针(包括相关的RFC)。请去阅读那个RFC - 你会学到比仅仅使用别人的API更多的东西。 - Alnitak
2个回答

1

来自PCAP.Net:

Pcap.Net.DevelopersPack.0.7.0.46671.x64\src\InterpretingThePackets\Program.cs

            // Compile the filter
            using (BerkeleyPacketFilter filter = communicator.CreateFilter("ip and udp"))
            {
                // Set the filter
                communicator.SetFilter(filter);
            }

            Console.WriteLine("Listening on " + selectedDevice.Description + "...");

            // start the capture
            communicator.ReceivePackets(0, PacketHandler);
    }


    // Callback function invoked by libpcap for every incoming packet
    private static void PacketHandler(Packet packet)
    {
        // print timestamp and length of the packet
        Console.WriteLine(packet.Timestamp.ToString("yyyy-MM-dd hh:mm:ss.fff") + " length:" + packet.Length);

        IpV4Datagram ip = packet.Ethernet.IpV4;
        UdpDatagram udp = ip.Udp;

        // print ip addresses and udp ports
        Console.WriteLine(ip.Source + ":" + udp.SourcePort+ " -> " + ip.Destination + ":" + udp.DestinationPort);
    }

这不够吗?


我可以使用PCap.Net来获取UDP数据包,但我感兴趣的是解析携带DNS响应的UDP数据包的详细信息。基本上,我想要能够获得一个DNS响应UDP数据包,然后解析它以获取DNS数据包中Answer记录中的IP地址(们),这些IP地址是Type A而不是Type CNAME。因此,基本上就是能够解析UDP / DNS数据包的DNS部分。 - Greg
现在问题更加清晰了。几年前,我能够从DNS数据包中提取IP地址。我所使用的只是一些RFC文档。请尝试访问此链接:http://www.pjsip.org/pjlib-util/docs/html/group__PJ__DNS__PARSING.htm - Vasyl Boroviak

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接