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()

  完整的代碼請移步上一節。查詢報文中的問題部分就簡單介紹到這裏。

相關文章
相關標籤/搜索