La captura de las respuestas DNS con PCap.Net?
Pregunta
Q1 - ¿Es posible petición DNS captura / respuestas con la biblioteca
Q2 - Si es así, una vez que tenga el paquete ¿alguien tiene alguna código de ejemplo que muestra la forma en que pude extraer los campos de la respuesta de DNS? En en particular la dirección IP que resuelve DNS para el nombre DNS dada proporcionada en particular.
Solución
Sí, es posible.
El código de ejemplo sería un poco en el lado largo, aunque ...
En esencia, es necesario:
- extraer el encabezado ethernet
- extraer la cabecera IP
- extraer la cabecera UDP [suponiendo que el paquete no se fragmenta, o el uso de TCP]
- extraer la carga útil DNS
entonces manejar el resto del paquete de acuerdo con la descripción muy completa dada en RFC 1035 .
En la práctica que los medios:
- ignorar las solicitudes - toda la información que necesita está en las respuestas (
QR == 1
) - cheque por
RCODE == 0
yANCOUNT > 0
- mirada en el Pregunta ??em> sección para encontrar el nombre que se ha preguntado
- buscar respuestas en la sección Respuesta ??em> (la!)
Para complicar las cosas aún más lo que tienes que etiquetas mango DNS (serie de <count><data...>
campos) y potencialmente manejar etiquetas comprimido también!
Esto suena desagradable, pero nada de esto es realmente que duro. Tengo el código C ++ que hace todo esto y no es tan largo, pero no puedo liberarlo.