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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM