golang實現dns網域名稱解析(二)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

  上一節已經講了如何構造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()

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.