golang实现dns域名解析(二)

  上一节已经讲了如何构造dns请求包的状况,这一节接着上一节的状况,谈谈dns查询报文中的问题部分。问题部分中每一个问题的格式以下:dom

  

  

  查询名是要查找的名字,它是一个或者多个标识符的序列。每一个标识符以首字母字节的计数值来讲明随后标识符的字节长度,每一个查询名以最后字节为0结束,长度为0的标识符是根标识符。具体状况咱们抓个包看看:spa

  

  咱们看到请求的名字是www.baidu.com发出的包的内容是下面的红线标识的部分,要查找的名字被转变成了3www5baidu3com这种的格式,因此咱们在构造dns查询请求包的时候,须要把查询的名字格式改改:blog

  var (dns

          buffer   bytes.Bufferstring

          segments []string = strings.Split(domain, ".")it

      )class

      for _, seg := range segments {请求

          binary.Write(&buffer, binary.BigEndian, byte(len(seg)))im

          binary.Write(&buffer, binary.BigEndian, []byte(seg))查询

      }

      binary.Write(&buffer, binary.BigEndian, byte(0x00))

      return buffer.Bytes()

  完整的代码请移步上一节。查询报文中的问题部分就简单介绍到这里。

相关文章
相关标签/搜索