La capture des réponses DNS avec PCap.Net?
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.
La solution
Oui, il est possible.
Exemple de code serait un peu sur le côté long, mais ...
En substance, vous devez:
- extraire l'en-tête Ethernet
- extraire l'en-tête IP
- extraire l'en-tête UDP [en supposant que le paquet est pas fragmenté, ou en utilisant TCP]
- 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:
- ignorer les demandes - toutes les informations dont vous avez besoin est dans les réponses (
QR == 1
) - pour vérifier
RCODE == 0
etANCOUNT > 0
- voir la Question section pour trouver le nom qui a été interrogé
- 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.