3

.NET で UDP パケットを解析するにはどうすればよいですか?

私はパケットをキャプチャするために PCap.Net を使用しています。この場合は UDP パケットであり、(PcapDotNet.packets.Ethernet.IpV4.Udp) を介して PCap.net オブジェクトからアクセスできます。

結果、Udp パケットを取得し、これを解析するにはどうすればよいですか? 特に、UDP パケット内に格納されている、発生する DNS 要求と応答を分離します。

ここで役立つライブラリはありますか?

編集:私ができるようにしたいことをより具体的にするには、DNS応答からIPアドレスを抽出することです.Wiresharkを使用した調査に基づいて、次のようになります:

(a) 入力: DNS 応答である UDP パケットのペイロード

(b) 処理: UDP パケットの DNS 応答部分を解析します。Answers 部分を探し、この中でタイプが A (ホスト アドレス) [CNAME レコードではない] である回答レコードを見つけ、この回答レコードで IP アドレスを取得します。

(c) Return: DNS 応答からの IP アドレス。

4

2 に答える 2

1

これを行うコードを持つ次のプロジェクトを見つけました

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

特に Response.cs クラス。また、コードにはバグがありますが、ページのコメントでその場所が強調表示されていることに注意してください。

于 2010-08-27T22:20:21.373 に答える
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);
    }

十分ではありませんか?

于 2010-08-19T07:49:20.270 に答える