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

时间:2010-08-19 03:40:35

标签: 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)处理:解析UDP数据包的DNS响应部分。找到答案部分,在此查找答案记录,其类型为A(主机地址)[不是CNAME记录],然后使用此答案记录获取IP地址。

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

2 个答案:

答案 0 :(得分: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);
    }

还不够吗?

答案 1 :(得分:1)

我发现以下项目有代码执行此操作

http://www.codeproject.com/KB/IP/dnslookupdotnet.aspx

特别是Response.cs类。另请注意,代码中存在错误,但页面上的注释会突出显示此处的位置。