我正在寻找建立在NodeMCU平台上的 this example强制门户网站,我正在努力了解DNS请求的工作原理. (相关文件是dns-liar.lua)我或多或少地解码了响应的内容,但不知道它的每个部分是做什么的,而
NodeMCU的IP:
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地址响应每个请求,但我不确定其他任何字节是做什么的.
呼!当人们决定提前格式化几乎整个数据包时,这总是很棘手,特别是当它跨越RFC的几个子部分时.无论如何,我继续前进并分叉CaptiveIntraweb并评论了DNS代码.我还有submitted a PR我的更改所以它有望在未来的版本中被拉上游.您可以在那里阅读整个内容(它详细介绍了每个DNS字段),但以下是作者正在做的事情的重点:
>前两个字节是从请求中解析的ID字段的副本>接下来的10个字节是预制的标题,包括数据包的类型等等(…_ str1).>下一个X字节是请求中请求的NAME的副本>接下来的4个字节是问题数据的其余部分(类型/类),接下来的14个字节是压缩的NAME,以及响应的类型/ class / ttl / length(…_ str2).>最后,最后四个字节是节点的IP.