странные символы в DNS отвечают - PullRequest
0 голосов
/ 19 октября 2019

Я нашел пример DNS-клиента в c: https://www.binarytides.com/dns-query-code-in-c-with-linux-sockets/ И я не понимаю одну вещь в функции ReadName (). Здесь * Reader - указатель на начало ответа DNS, где находится URL, IP-адрес которого мы хотим найти. Я не понимаю, какое условие:

if(*reader>=192)
{
    offset = (*reader)*256 + *(reader+1) - 49152; //49152 = 11000000 00000000 ;)
    reader = buffer + offset - 1;
    jumped = 1; //we have jumped to another location so counting wont go up!
}
else
{
    name[p++]=*reader;
}

Что это значит, когда какой-то символ URL превышает 192? А что именно мы делаем (в состоянии)? Спасибо!

Ответы [ 2 ]

0 голосов
/ 20 октября 2019

В DNS нет "странных" символов.

Код, который вы показываете, связан с указателями и тем, как имена сжимаются в пакетах DNS.

Вам нужно прочитать RFC 1035 и, в частности, §4.1.4 «Сжатие сообщений».

Если двухбайтовая последовательность начинается с первых двухбитных наборов (то есть десятичное значение 128 + 64 = 192 для одного байта),затем остальное - указатель на другое место в сообщении, где хранится имя.

Это именно то, что делает код выше.

0 голосов
/ 19 октября 2019

где URL-адрес, IP-адрес которого мы хотим найти

Имя хоста (DNS работает с URL-адресами) было введено из стандартного ввода и являлось аргументом функции ngethostbyname.

Сравнение с 192 связано с не доменными именами ASCII.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...