golang实现dns域名解析(二)

chase-wind · · 577 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

  

  

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

  

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

  var (

          buffer   bytes.Buffer

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

      )

      for _, seg := range segments {

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

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

      }

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

      return buffer.Bytes()

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

本文来自:博客园

感谢作者:chase-wind

查看原文:golang实现dns域名解析(二)

入群交流(和以上内容无关):Go中文网 QQ 交流群:729884609 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

577 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传