zoukankan      html  css  js  c++  java
  • golang实现dns域名解析(二)

      上一节已经讲了如何构造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()

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

  • 相关阅读:
    巴厘岛的雕塑(sculptures)
    BZOJ4361: isn
    BZOJ2131: 免费的馅饼
    BZOJ4240: 有趣的家庭菜园
    BZOJ5484: [Usaco2018 Dec]Sort It Out
    BZOJ 2151: 种树
    HDU 1285 确定比赛名次(拓扑排序+优先队列)
    申请中文域名并跳转到个人网站(多种方法的尝试)
    Java binarysearch方法
    eclipse2019-12设置中文
  • 原文地址:https://www.cnblogs.com/chase-wind/p/6823763.html
Copyright © 2011-2022 走看看