Question

Q1 - Est-il possible de capturer demande DNS / réponses avec la bibliothèque

Q2 - Si oui, une fois que j'ai le paquet que quelqu'un a des exemples de code qui montre comment je pouvais extraire les champs de la réponse DNS? Dans notamment l'adresse IP que le serveur DNS pour résoudre le nom DNS donné à condition en particulier.

Était-ce utile?

La solution

Oui, il est possible.

Exemple de code serait un peu sur le côté long, mais ...

En substance, vous devez:

  1. extraire l'en-tête Ethernet
  2. extraire l'en-tête IP
  3. extraire l'en-tête UDP [en supposant que le paquet est pas fragmenté, ou en utilisant TCP]
  4. extraire la charge utile DNS

puis traiter le reste du paquet conformément à la description donnée très approfondie dans RFC 1035 .

En pratique, cela signifie:

  1. ignorer les demandes - toutes les informations dont vous avez besoin est dans les réponses (QR == 1)
  2. pour vérifier RCODE == 0 et ANCOUNT > 0
  3. voir la Question section pour trouver le nom qui a été interrogé
  4. chercher des réponses dans la section Réponse (duh!)

Pour compliquer encore les choses que vous avez à gérer les étiquettes DNS (série de <count><data...> champs) et la poignée potentiellement étiquettes comprimé trop!

Cela semble méchant, mais rien de tout cela est en fait que dur. J'ai le code C de ce fait tout cela et ce n'est pas si longtemps, mais je ne peux pas le libérer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top