NodeMCU UDP DNS 请求格式
NodeMCU UDP DNS request format
我正在查看 this example 在 NodeMCU 平台上构建的强制门户,我正在尝试了解 DNS 请求的工作原理。 (相关文件是dns-liar.lua
)我或多或少地解码了响应是什么,但不知道它的每一部分是做什么的,而且我找不到任何显示类似数据包结构的在线资源。
NodeMCU IP:
a.b.c.d
要求:
|A|B| ... |(13th byte) [=11=] 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 and commented up the DNS code. I've also submitted a PR 进行了更改,希望它能在未来的版本中被拉到上游。你可以在那里阅读整篇文章(它详细介绍了每个 DNS 字段),但这里是作者正在做的重点:
- 前两个字节是从请求中解析的 ID 字段的副本
- 接下来的 10 个字节是预制的 header,包括数据包类型等 (..._str1)。
- 接下来的 X 字节是从请求
请求的 NAME 的副本
- 接下来的 4 个字节是剩余的问题数据 (type/class),接下来的 14 个字节是压缩的 NAME,以及响应的 type/class/ttl/长度 (.. ._str2).
- 最后,最后四个字节是节点的IP。
我正在查看 this example 在 NodeMCU 平台上构建的强制门户,我正在尝试了解 DNS 请求的工作原理。 (相关文件是dns-liar.lua
)我或多或少地解码了响应是什么,但不知道它的每一部分是做什么的,而且我找不到任何显示类似数据包结构的在线资源。
NodeMCU IP:
a.b.c.d
要求:
|A|B| ... |(13th byte) [=11=] 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 and commented up the DNS code. I've also submitted a PR 进行了更改,希望它能在未来的版本中被拉到上游。你可以在那里阅读整篇文章(它详细介绍了每个 DNS 字段),但这里是作者正在做的重点:
- 前两个字节是从请求中解析的 ID 字段的副本
- 接下来的 10 个字节是预制的 header,包括数据包类型等 (..._str1)。
- 接下来的 X 字节是从请求 请求的 NAME 的副本
- 接下来的 4 个字节是剩余的问题数据 (type/class),接下来的 14 个字节是压缩的 NAME,以及响应的 type/class/ttl/长度 (.. ._str2).
- 最后,最后四个字节是节点的IP。