Формат запроса NodeMCU UDP DNS

Я смотрю на этот пример адаптивного портала, построенного на платформе NodeMCU, и я Я пытаюсь понять, как работают DNS-запросы. (Соответствующий файл - dns-liar.lua) Я более или менее расшифровал ответ, но понятия не имею, что делает каждая его часть, и я не могу найти какие-либо онлайн-ресурсы, демонстрирующие подобную структуру пакета.

IP-адрес NodeMCU:

a.b.c.d

Запрос:

|A|B| ... |(13th byte) \0 terminated string (str)| ...

Ответ: (байты, разделенные знаком "|")

|A|B|x80|x00|x00|x01|x00|x01|x00|x00|x00|x00|str|x00|x01|x00|x01|xC0|x0C|x00|x01|x00|x01|x00|x00|x03|x00|x00|x04|a|b|c|d|

Я понимаю, что str, скорее всего, является доменом для поиска, а abcd — это просто NodeMCU, отвечающий на каждый запрос своим собственным IP-адресом, но я не уверен, что делают другие байты.


person Aaron    schedule 20.04.2017    source источник
comment
Вы спрашиваете о формате сообщения DNS? Если да (у меня есть сомнения), то я предлагаю tcpipguide.com/free/ или technet.microsoft.com/en-us/library /dd197470(v=ws.10).aspx - кроме RFC2136, конечно.   -  person Marcel Stör    schedule 06.05.2017


Ответы (1)


Вау! Всегда сложно, когда люди решают заранее отформатировать почти весь пакет, особенно когда он охватывает несколько подразделов RFC.

Во всяком случае, я пошел дальше и разветвил CaptiveIntraweb и прокомментировал код DNS. Я также отправил PR с моими изменениями, так что, надеюсь, он будет поднят вверх по течению в будущий выпуск. Вы можете прочитать все это там (он подробно описывает каждое поле DNS), но вот основные моменты того, что делает автор:

  1. Первые два байта являются копией поля ID, извлеченного из запроса.
  2. Следующие 10 байтов — это готовый заголовок, включающий тип пакета и т. д. (..._str1).
  3. Следующие X байтов являются копией ИМЯ, запрошенного из запроса.
  4. Следующие 4 байта — это остальные данные вопроса (тип/класс), а следующие 14 байтов — это сжатое ИМЯ и тип/класс/ttl/длина ответа (..._str2).
  5. Наконец, последние четыре байта — это IP-адрес узла.
person BJ Black    schedule 27.12.2017
comment
Очень подробные комментарии, они были очень информативны! - person Aaron; 02.01.2018