2010-08-19 3 views
2

Comment puis-je analyser un paquet UDP dans .NET? J'utilise PCap.Net pour capturer des paquets, dans ce cas des paquets UDP, auxquels je peux accéder depuis l'objet PCap.net via (PcapDotNet.packets.Ethernet.IpV4.Udp).comment puis-je analyser un paquet UDP dans .NET?

Comment puis-je prendre les résultats, le paquet Udp, et analyser cela? En particulier, pour dégrouper les requêtes DNS et les réponses qui se produisent dans un paquet UDP.

Y at-il une bibliothèque qui pourrait aider ici?

EDIT: Pour être plus précis ce que je veux être en mesure de le faire est d'extraire l'adresse IP de la réponse DNS et basée sur l'examen en utilisant Wireshark serait par:

(a) entrée: Charge utile d'un paquet UDP qui est une réponse DNS

(b) Traitement: analyser la partie de réponse DNS du paquet UDP. Trouvez la partie Réponses, dans laquelle trouvez l'enregistrement de réponse pour lequel le type est A (adresse de l'hôte) [pas un enregistrement CNAME], puis avec cette réponse, obtenez l'adresse IP.

(c) Retour: L'adresse IP de la réponse DNS.

+0

WinPCAP n'est pas livré avec un ensemble d'analyseurs? –

+0

Go pour Newtwork Monitor API http://www.microsoft.com/downloads/details.aspx?FamilyID=983b941d-06cb-4658-b7f6-3088333d062f&displaylang=en –

+0

@Will - Je peux me rendre à UDP OK, mais c'est juste analyser le détail d'un paquet UDP qui transporte les réponses DNS qui m'intéressent. – Greg

Répondre

1

De 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); 
    } 

est-il pas suffisant?

+0

Je vais bien au paquet UDP avec PCap.Net, mais il analyse le détail d'un paquet UDP qui transporte les réponses DNS qui m'intéressent. Essentiellement, je veux pouvoir avoir un paquet UDP de réponse DNS, alors l'analyser pour obtenir l'adresse IP (es?) dans les enregistrements de réponse du paquet DNS qui sont de type A (et non de type CNAME). Donc, fondamentalement, être capable d'analyser la partie DNS d'un paquet UDP/DNS. – Greg

+0

Maintenant, la question est plus claire. Eh bien, il y a plusieurs années, j'étais capable d'extraire des IP à partir de paquets DNS. Tout ce que j'ai utilisé est quelques RFC. Essayez ceci: http://www.pjsip.org/pjlib-util/docs/html/group__PJ__DNS__PARSING.htm –

Questions connexes