L'acquisizione di risposte DNS con PCap.Net?
Domanda
Q1 - È possibile acquisire richiesta DNS/risposte con la biblioteca?
Q2 - Se sì, una volta che ho il pacchetto qualcuno ha qualche codice di esempio che mostra come poter estrarre i campi di risposta DNS?In particolare l'indirizzo IP che il DNS risolto per il nome DNS a condizione, in particolare.
Soluzione
Sì, è possibile.
Codice di esempio potrebbe essere un po ' sul lato lungo, però...
In sostanza, è necessario:
- estrarre l'intestazione ethernet
- estrarre l'intestazione IP
- estrarre l'intestazione UDP [supponendo che il pacchetto non è frammentato, o utilizzando il protocollo TCP]
- estrarre il DNS payload
quindi di gestire il resto del pacchetto, secondo le più approfondita descrizione RFC 1035.
In pratica questo significa che:
- ignorare le richieste - tutte le info di cui hai bisogno è nelle risposte (
QR == 1
) - controllare
RCODE == 0
eANCOUNT > 0
- guarda nel Domanda sezione per trovare il nome che è stato interrogato
- cercare le risposte nel Risposta (duh!) sezione
A complicare ulteriormente le cose è necessario gestire le etichette DNS (serie di <count><data...>
i campi) e potenzialmente gestire compressa etichette troppo!
Questo suona brutto, ma nessuno di esso è in realtà che difficile.Ho il codice C++ che fa tutto questo e a non molto tempo fa, ma non riesco a sbloccarla.