如何正确格式化原始DNS查询?

时间:2015-11-01 21:56:06

标签: dns network-programming

我正在创建一个Lua库,以帮助处理发送和接收DNS请求,目前正在阅读this(DNS协议RFC),但我不知道如何正确格式化请求。例如,我是否必须指定消息的持续时间?我该怎么做?

我从Wireshark的检查中了解到,我之后应该也包括选项。我还在响应中看到0x00;这是否意味着我只需要在添加值之前对请求名称进行零终止?

我特别谈到的部分是RFC的4.1.3。

一些注意事项:我使用个人服务器对此进行了测试,并在查询部分中获取了这些值:06 61 6c 69 73 73 61 04 69 6e 66 6f 00。特别是00是我感兴趣的,它在WireShark中突出显示,这意味着它很重要。我认为这意味着值是以空值终止的?然后关于类型和类的选项如下?

1 个答案:

答案 0 :(得分:2)

当4.1.3节引用" NAME"时,它会引用3.1节中的定义,该定义指明域名由一系列标签组成,每个标签都由由长度规范八位字节和多个八位字节组成。最终标签始终是根区域,其具有零长度名称,因此仅包含其中为零的长度八位字节。所以,是的,整个名称以零八位字节结束,但它不是"零终止"在通常的C字符串意义上。

另请注意,只有长度八位字节中的低六位是长度数据,最上面的两位是标志。