Я работаю над реализацией DNS-запроса на C и заинтересован в запросе записей A и AAAA (IPv4 и IPv6) в одном пакете запросов, но я не получаю никаких ответов от сервера имен, когда я помещаю эти два запросы вместе в одном пакете, как это. Я попытался отправить запрос нескольким серверам имен (как локальным, так и 8.8.8.8) без везения. Является ли это чем-то, что не работает, или, может быть, мой пакет запросов неверен?
Мой основной алгоритм добавления запроса AAAA (к существующему пакету запроса A) заключается в увеличении поля QDCOUNT в заголовке пакета, затем добавьте запрос RR с TYPE, установленным в AAAA и NAME, в качестве указателя на имя хоста в существующий запрос (байты 0xC0 0x0C для смещения 12 байт от начала пакета). Правильно ли это звучит?
FYI, все работает нормально только с запросом A в пакете.
Изменить: По-видимому, мои запросы были слегка искажены (я не знал, что запросы, в отличие от ответов, не имеют полей TTL и RDLENGTH/RDATA). Исправив это, я возвращаю ответы об ошибках формата RCODE = 1, которые подтверждают наличие двух запросов. Означает ли это, что несколько запросов на пакет просто не поддерживаются?
Изменить 2: Здесь hexdump поиска для 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
Я не вижу в этом ничего плохого.