Anfordern A-und AAAA-records in einzelne DNS-Abfrage
Arbeite ich auf eine DNS-Abfrage für die Implementierung in C und Interessierte in die A-und AAAA IPv4 (und IPv6 -) Datensätze in einer einzigen Abfrage-Paket, aber ich bekomme keine Antworten von den nameserver, wenn ich die beiden Abfragen zusammen in einem Paket wie diesem. Ich habe versucht, das senden der Abfrage an mehrere verschiedene Nameserver (sowohl lokale als auch 8.8.8.8) mit kein Glück. Ist das etwas, was nicht funktioniert, oder ist es wahrscheinlich, dass meine Anfrage Paket fehlerhaft ist?
Meine grundlegende Algorithmus für das anfügen der AAAA-Abfragen (an einem bestehenden Ein request-Paket) ist die Erhöhung der QDCOUNT-Feld in der Paket-header, fügen Sie ein RR-Abfrage mit TYP AAAA und-NAME als Zeiger auf den hostname in der bestehenden Abfrage (Byte 0xC0 0x0C für ein offset von 12 bytes vom Beginn des Pakets). Klingt das richtige?
FYI, alles funktioniert nur mit der Einen Abfrage in das Paket.
Edit: Offenbar meine Fragen wurden alle leicht fehlerhaften (ich war nicht bewusst, dass Abfragen im Gegensatz zu Antworten, die nicht über TTL und RDLENGTH/RDATA-Feldern). Bei der Festsetzung dieses, ich bin immer wieder RCODE=1 format-Fehler-Antworten, die erkennen die Gegenwart von den 2 Abfragen. Bedeutet das, dass mehrere Abfragen pro Paket sind einfach nicht unterstützt?
Edit 2: Hier ein hexdump einer lookup für www.google.com
:
d8 32 01 00 00 02 00 00 00 00 00 00 03 77 77 77 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 00 01 00 01 c0 0c 00 1c 00 01
Ich nicht sehen, nichts falsch mit ihm.
- Weder Wireshark, das ist normalerweise ein gutes Zeichen, dass Sie habe gelesen, die spec richtig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht bewusst, alle Nameserver, die mehrere Fragen in einer einzigen Abfrage.
Gibt es Potenzial für Zweideutigkeiten in solchen Abfrage, da gibt es pro-Paket-flags (wie AA) die anwenden konnte, um nur eine der Fragen. Wenn Sie Fragen, zwei Fragen, und der server den autorisierenden server für nur eine der Domänen, sollte der server das flag oder nicht? Ich vermute, dass Themen wie diese abschrecken implementors.
Gab es eine Reihe von Vorschlägen, um das problem zu lösen, die Sie zu reden (wie diese Vorschlag zur Einführung einer QTYPE vereint A-und AAAA, und Paul Vixie ' s wiederholt versuche die Einführung eines EDNS form von mehreren Fragen), aber derzeit Programme unterstützt sowohl IPv4 und 6 neigen dazu, führen Sie zwei separate Abfragen, entweder AAAA folgte (nach einem timeout) durch Eine, oder beide gleichzeitig.
Ich nehme an, es gibt auch "alle", QTYPE, aber es kann zurückkehren, viel mehr Daten als Sie benötigen.
Edit: aus der Abfrage.c in der BIND-Quelle:
Edit: auch von resolver.c in der BIND-Quelle:
ANY
ist, dass, wenn eine stub-Resolver sendet einANY
- Abfrage, um eine rekursive server, der server hat nur zu reagieren, mit dem, was in seinem cache zu dieser Zeit (obwohl es wird senden der Abfrage vorgeschaltet, wenn es nichts in den cache). Wenn dieA
im cache, aber derAAAA
ist das nicht, man bekommt nur dieA
.Während der Paket-format technisch unterstützt, wenn mehr als ein Datensatz in der Frage-Sektion (siehe §4.1.2 RFC-1035), in der Praxis hat es einfach nicht funktioniert, wie hast du Sie gefunden.
Insbesondere niemand hat es je geschafft, zu definieren, korrekte Semantik für das, was zu tun ist, wenn die zwei Fragen wurden zu zwei verschiedenen RCODEs.
Habe ich versucht zu definieren die Semantik in der IETF aber noch, die hat noch nicht sehr weit.
In mein eigenes DNS-Paket-parsing-code, den ich immer ablehnen, ein solches Paket.
A
undAAAA
Abfragen können compined in einem einzigen Paket, also meine Vermutung ist, dass Ihr Paket ist noch fehlerhaften, in gewisser Weise, vor allem, wenn man bedenkt, dass Abfragen nicht nutzen-offsets in der jeweils anderen Daten. Ich wäre wirklich hilfreich, wenn man zeigen könnte, Ihrem code, oder zumindest die raw-bytes, die Sie senden.