DNS ответ, ответ и официальный раздел - PullRequest
5 голосов
/ 26 марта 2012

Я просматриваю ответные пакеты DNS в Wireshark и не могу понять шестнадцатеричное кодирование для ответных и авторитетных разделов.

С учетом DNS-запроса для: mail.abcd.com

Раздел ответа содержит поле имени, и шестнадцатеричное кодирование для этого варьируется среди:

 0xc00c
 0xc012

Оба они приводят к тому, что все имя заполняется в поле.

Официальный раздел также содержит поле имени, но шестнадцатеричная кодировка для этого обычно:

 0xc010

Это приводит к тому, что abcd.com заполняется в поле.

Может ли кто-нибудь сказать, каково соглашение, используемое для заполнения этих полей, так как это довольно запутанно.

Спасибо

Ответы [ 3 ]

9 голосов
/ 26 марта 2012

метки DNS используют формат <length><data ...>.

Метка может иметь длину не более 63 байтов, поэтому в поле <length> осталось два бита. Они используются для кодирования типа метки.

Если старшие два бита равны 0b11, то оставшиеся шесть битов вместо этого объединяются со следующим байтом в виде указателя сжатия , который является смещением внутри полезной нагрузки DNS до до экземпляр другого ярлыка.

Поскольку заголовок протокола DNS имеет длину 12 байтов, самое короткое допустимое смещение составляет 12 байтов, что дает значение, которое вы видели выше, равным 0xc00c.

[ технически , можно создать указатель сжатия, который указывает на заголовок, но он не совсем соответствует протоколу].

Я бы настоятельно рекомендовал против , пытаясь пересмотреть спецификацию из проводных пакетов - вы неизбежно пропустите материал. Просто прочитайте RFC 1035 вместо этого - все основные компоненты находятся там.

5 голосов
/ 26 марта 2012

Считайте сжатие имени в спецификации. 0xc, 0x12 и 0x10 являются указателями на более ранние копии имен «mail.abcd.com» и «abcd.com» в пакете.

0 голосов
/ 25 декабря 2018

Name Compression technique from DNS

В сообщениях DNS используется значение смещения , чтобы указать, сколько байтов после начала сообщения мы можем найти доменное имя, уже включенное в сообщение.

enter image description here

Где «адрес начального байта» отсчитывается в байтах от начала всего сообщения. Начать отсчет с нуля в качестве первого байта .

Таким образом, в нашем примере 0xC00C равно 1100 0000 0000 1100, что означает смещение 1100, которое составляет 12 байтов от начала всего сообщения DNS .

...