Erfassen von DNS-Antworten mit PCap.Net?
Frage
Q1 - Ist es möglich, Capture DNS-Anfrage / Antworten mit der Bibliothek
Q2 - Wenn ja, sobald ich das Paket haben hat jemand eine Beispielcode Das zeigt, wie ich die Felder aus der DNS-Antwort extrahieren könnte? Im bestimmte Adresse der IP dass DNS aufgelöst für den angegebenen DNS-Namen sofern im Besonderen.
Lösung
Ja, es ist möglich.
Beispielcode wäre ein bisschen auf der langen Seite sein, obwohl ...
Im Wesentlichen müssen Sie:
- extrahieren Sie die Ethernet-Header
- extrahieren Sie die IP-Header
- extrahieren Sie die UDP-Header [unter der Annahme, das Paket nicht fragmentiert ist, oder unter Verwendung von TCP]
- extrahieren Sie die DNS-Nutzlast
Griff dann den Rest des Pakets gemäß der sehr gründlichen Beschreibung angegeben in RFC 1035 .
In der Praxis bedeutet das:
- ignorieren Anfragen - alle Informationen, die Sie brauchen, ist in Antworten (
QR == 1
) - Check für
RCODE == 0
undANCOUNT > 0
- Blick in den Frage Abschnitt Namen zu finden, der abgefragt wurde
- Suchen Sie nach Antworten in der Antwort (duh!) Abschnitt
Um die Sache noch komplizierter Sie handle DNS Etiketten (Serie von <count><data...>
Felder) und möglicherweise komprimiert Etiketten verarbeiten auch!
Das klingt böse, aber nichts davon ist eigentlich , die hart. Ich habe C ++ Code, dass all dies tut, und es ist nicht so lang, aber ich kann es nicht lösen.