上一節已經講了如何構造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()
完整的代碼請移步上一節。查詢報文中的問題部分就簡單介紹到這裏。