Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在.NET中解析UDP数据包?_C#_.net_Dns_Udpclient_Pcap.net - Fatal编程技术网

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

C# 如何在.NET中解析UDP数据包?,c#,.net,dns,udpclient,pcap.net,C#,.net,Dns,Udpclient,Pcap.net,如何在.NET中解析UDP数据包 我使用PCap.Net捕获数据包,在本例中是UDP数据包,我可以通过(PcapDotNet.packets.Ethernet.IpV4.UDP)从PCap.Net对象访问这些数据包 如何获取结果、Udp数据包并解析它?特别是对UDP数据包中出现的DNS请求和响应进行拆分 这里有图书馆可以帮忙吗 编辑:更具体地说,我希望能够从DNS响应中提取IP地址,并基于使用Wireshark的检查,通过以下方式: (a) 输入:作为DNS响应的UDP数据包的有效负载 (b)

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

我使用PCap.Net捕获数据包,在本例中是UDP数据包,我可以通过(PcapDotNet.packets.Ethernet.IpV4.UDP)从PCap.Net对象访问这些数据包

如何获取结果、Udp数据包并解析它?特别是对UDP数据包中出现的DNS请求和响应进行拆分

这里有图书馆可以帮忙吗

编辑:更具体地说,我希望能够从DNS响应中提取IP地址,并基于使用Wireshark的检查,通过以下方式:

(a) 输入:作为DNS响应的UDP数据包的有效负载

(b) 处理:解析出UDP数据包的DNS响应部分。查找应答部分,在此部分中查找类型为A(主机地址)[非CNAME记录]的应答记录,然后使用此应答记录获取IP地址

(c) 返回:来自DNS响应的IP地址。

来自PCAP.Net:

Pcap.Net.DevelopersPack.0.7.0.46671.x64\src\interpretationthepackets\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);
    }

这还不够吗?

我找到了下面的项目,它有代码来完成这项工作


特别是Response.cs类。还要注意的是,代码中有一个bug,但页面上的注释突出显示了它所在的位置。

WinPCAP不是有很多解析器吗?请选择NewWork Monitor API@Will-我可以开始使用UDP OK,但它正在解析一个UDP数据包的细节,该数据包包含我感兴趣的DNS响应。@Amit-你是否建议我使用PCap.Net进行数据包捕获,一旦我获得UDP有效负载,就有UDP/DNS解析器可用,我可以在Microsoft网络监视器库中使用?我已经给了你一堆指针(包括相关RFC)在你的另一个相关问题中。请阅读RFC-你将了解一个该死的站点,而不仅仅是使用其他人的API。我可以使用PCap.Net开始UDP数据包,但它解析的是承载我感兴趣的DNS响应的UDP数据包的细节。基本上,我希望能够拥有一个DNS响应UDP数据包,然后解析它获取A型(不是CNAME型)DNS数据包应答记录中的IP地址。因此基本上能够解析UDP/DNS数据包的DNS部分。现在问题更清楚了。几年前,我能够从DNS数据包中提取IP。我使用的只是一些RFC。尝试以下方法: