NodeMCU UDP DNS请求格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NodeMCU UDP DNS请求格式相关的知识,希望对你有一定的参考价值。

我正在查看在NodeMCU平台上构建的强制门户的this example,我正在尝试了解DNS请求的工作原理。 (相关文件是dns-liar.lua)我或多或少地解码了响应是什么,但不知道它的每个部分做了什么,我找不到任何显示类似数据包结构的在线资源。

NodeMCU的IP:

a.b.c.d

请求:

|A|B| ... |(13th byte)  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地址响应每个请求,但我不确定其他任何字节是做什么的。

答案

呼!当人们决定提前格式化几乎整个数据包时,这总是很棘手,特别是当它跨越RFC的几个子部分时。

无论如何,我继续分叉CaptiveIntraweb并评论DNS代码。我也对submitted a PR进行了改动,所以希望在未来的版本中上游。您可以在那里阅读整个内容(它详细介绍了每个DNS字段),但以下是作者正在做的事情的重点:

  1. 前两个字节是从请求中解析的ID字段的副本
  2. 接下来的10个字节是预制的标题,包括数据包的类型等等(..._ str1)。
  3. 下一个X字节是请求中请求的NAME的副本
  4. 接下来的4个字节是问题数据的其余部分(类型/类),接下来的14个字节是压缩的NAME,以及响应的类型/ class / ttl / length(..._ str2)。
  5. 最后,最后四个字节是节点的IP。

以上是关于NodeMCU UDP DNS请求格式的主要内容,如果未能解决你的问题,请参考以下文章

Linux C/C++实现DNS请求器(UDP编程)

netty系列之:在netty中使用UDP协议请求DNS服务器

BeagleBone Black–ESP8266 UDP 服务

ESP8266, NodeMCU, soft AP - UDP server-like soft AP, 独立接入点

春招备战

HTTPS (SSL) 使用 NodeMCU 获取请求