Основной формой DNS-запроса является короткий заголовок, который, по сути, содержит все фиксированные байтовые значения, за которыми следует то, что вы получите, если вы взяли имя, добавили к нему префикс (.
), а затем заменили каждую точку набайт в диапазоне 1-63, указывающий длину следующего сегмента имени до следующей точки, за которой следуют еще несколько байтов с фиксированным значением.Пока все, что вы делаете, это обычный поиск адресов и ничего необычного, например, передача зон, это все, что вам нужно знать о протоколе DNS.
Подробнее о полях заголовка и т. Д. Читайте в RFC 1035.Или просто скопируйте их из дампа сниффера пакетов.Единственное, что вы захотите изменить, - это идентификатор запроса (он должен быть случайным, чтобы избежать тривиальных спуфинговых атак на вашу программу) и, возможно, тип RR (например, если вам нужно запросить IPv6 (AAAA) или обратный DNS (PTR) записи в дополнение к просто A.