Поле NAME не полностью подробно описано в разделе 4.1.3 RFC 1035.
Я хочу понять это поле (программно) для типа сообщения ANSWER, и я искал эти ресурсы (таблицу) для этого.
Я следил:
Я что-то упустил?
псевдокод:
ВОПРОС:
byte[]{
0x00,0x00,
0x01,0x00,
0x00,0x02,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x03,0x77,0x77,0x77,
0x12,0x74,0x68,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x74,0x67,0x65,0x65,0x6b,
0x03,0x63,0x6f,0x6d,
0x00,
0x00,0x01,
0x00,0x01,
0x13,0x74,0x74,0x68,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x74,0x67,0x65,0x65,0x6b,
0x03,0x63,0x6f,0x6d,
0x00,
0x00,0x01,
0x00,0x01
}
ОТВЕТ:
byte[]{
0x00,0x00,
0x81,0x80,
0x00,0x02,
0x00,0x01,
0x00,0x00,
0x00,0x00,
0x03,0x77,0x77,0x77,
0x12,0x74,0x68,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x74,0x67,0x65,0x65,0x6b,
0x03,0x63,0x6f,0x6d,
0x00,
0x00,0x01,
0x00,0x01,
0x13,0x74,0x74,0x68,0x65,0x5f,0x70,0x61,0x63,0x6b,0x65,0x74,0x67,0x65,0x65,0x6b,
0x03,0x63,0x6f,0x6d,
0x00,
0x00,0x01,
0x00,0x01,
0xC0,0x0C, <----- answer start here , i want to understand this value
0x00,0x00,
0x00,0x00,0x06,0xcf,
0x00,0x04,
0x07,0x00,0x00,0x01
Часть NAME в разделе ответов DNS имеет тот же формат, что и часть QNAME в разделе вопросов DNS.
имя домена, представленное в виде последовательности меток, где каждая метка состоит из октета длины, за которым следует это количество октетов. Доменное имя заканчивается октетом нулевой длины для нулевой метки корня. Обратите внимание, что в этом поле может быть нечетное количество октетов; отступы не используются.
Он также подчиняется схеме сжатия, описанной в разделе 4.1.4, поэтому в типичном ответе DNS вы, скорее всего, увидите полное имя в разделе вопросов и указатель на него в разделе ответов.
Часть, которую вы явно указываете в своем вопросе, является одним из сжатых значений из раздела 4.1.4. Оба старших бита установлены в 1, а оставшаяся часть значения указывает на байт в ответе, на который делается ссылка. В данном случае байт 12 (0x00c), который выглядит как «www.the_nacketgeek.com» (который был QNAME в разделе вопросов).