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.

È stato utile?

Soluzione

Sì, è possibile.

Codice di esempio potrebbe essere un po ' sul lato lungo, però...

In sostanza, è necessario:

  1. estrarre l'intestazione ethernet
  2. estrarre l'intestazione IP
  3. estrarre l'intestazione UDP [supponendo che il pacchetto non è frammentato, o utilizzando il protocollo TCP]
  4. estrarre il DNS payload

quindi di gestire il resto del pacchetto, secondo le più approfondita descrizione RFC 1035.

In pratica questo significa che:

  1. ignorare le richieste - tutte le info di cui hai bisogno è nelle risposte (QR == 1)
  2. controllare RCODE == 0 e ANCOUNT > 0
  3. guarda nel Domanda sezione per trovare il nome che è stato interrogato
  4. 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top