как я могу разобрать пакет UDP в .NET?

как я могу разобрать пакет UDP в .NET?

Я использую PCap.Net для захвата пакетов, в данном случае пакетов UDP, к которым я могу получить доступ из объекта PCap.net через (PcapDotNet.packets.Ethernet.IpV4.Udp).

Как я могу взять результаты, пакет Udp и проанализировать его? В частности, для разделения DNS-запросов и ответов, которые содержатся в UDP-пакете.

Есть ли библиотека, которая могла бы помочь здесь?

EDIT: Чтобы быть более конкретным, я хочу извлечь IP-адрес из ответа DNS, и на основе проверки с помощью Wireshark это будет:

(a) Вход: полезная нагрузка пакета UDP, который является ответом DNS.

(b) Обработка: разобрать часть ответа DNS в пакете UDP. Найдите часть «Ответы», в ней найдите запись ответа, для которой тип — A (адрес хоста) [не запись CNAME], затем с помощью этой записи ответа получите IP-адрес.

(c) Возврат: IP-адрес из ответа DNS.


person Greg    schedule 19.08.2010    source источник
comment
Разве WinPCAP не поставляется с кучей парсеров?   -  person Will A    schedule 19.08.2010
comment
Перейти на Newtwork Monitor API microsoft.com /загрузки/   -  person    schedule 19.08.2010
comment
@Will - я могу перейти к UDP в порядке, но я просто анализирую детали пакета UDP, который содержит интересующие меня ответы DNS.   -  person Greg    schedule 19.08.2010
comment
@Amit - вы предлагаете, если я использую PCap.Net для захвата пакетов, после того, как я получу полезную нагрузку UDP, будут доступны парсеры UDP / DNS, которые я мог бы использовать в библиотеке сетевого монитора Microsoft?   -  person Greg    schedule 19.08.2010
comment
Я уже дал вам кучу указателей (включая соответствующий RFC) в вашем другом связанном вопросе. Пожалуйста, прочитайте этот RFC — вы изучите проклятый сайт больше, чем просто используя чужой API.   -  person Alnitak    schedule 21.08.2010


Ответы (2)


Из 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);
    }

Разве этого недостаточно?

person Vasyl Boroviak    schedule 19.08.2010
comment
Я могу перейти к UDP-пакету с помощью PCap.Net, но он анализирует детали UDP-пакета, который несет интересующие меня DNS-ответы. это для получения IP-адреса(ов?) в ответных записях пакета DNS, которые относятся к типу A (не к типу CNAME). Таким образом, в основном можно разобрать DNS-часть пакета UDP/DNS. - person Greg; 19.08.2010
comment
Теперь вопрос более понятен. Что ж, несколько лет назад мне удалось извлечь IP-адреса из DNS-пакетов. Все, что я использовал, это несколько RFC. Попробуйте это: pjsip.org/pjlib-util/docs/html/group__PJ__DNS__PARSING .htm - person Vasyl Boroviak; 19.08.2010

Я нашел следующий проект, в котором был код для этого

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

В частности, класс Response.cs. Также обратите внимание, что в коде есть ошибка, но в комментариях на странице указано, где она находится.

person Greg    schedule 27.08.2010