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