DNS報(bào)文結(jié)構(gòu)實(shí)例解析
抓迅雷的包,發(fā)現(xiàn)迅雷整了N 多和下載無(wú)關(guān)的東西,比如kankan ,games 啥的,啟動(dòng)的時(shí)候發(fā)了一堆DNS 請(qǐng)求來解析這些整合的東西。于是學(xué)習(xí)了一下DNS 報(bào)文的結(jié)構(gòu)DNS 請(qǐng)求報(bào)文的結(jié)構(gòu)是標(biāo)識(shí)I
抓迅雷的包,發(fā)現(xiàn)迅雷整了N 多和下載無(wú)關(guān)的東西,比如kankan ,games 啥的,啟動(dòng)的時(shí)候發(fā)了一堆DNS 請(qǐng)求來解析這些整合的東西。于是學(xué)習(xí)了一下DNS 報(bào)文的結(jié)構(gòu)
DNS 請(qǐng)求報(bào)文的結(jié)構(gòu)是
標(biāo)識(shí)ID :有發(fā)出DNS 請(qǐng)求的客戶端生成,對(duì)應(yīng)的DNS 響應(yīng)報(bào)文中也要置同樣的ID 。 16bit 的標(biāo)志字段 如下:
QR :0表示查詢報(bào)文,1表示響應(yīng)報(bào)文
Opcode :通常值為0(標(biāo)準(zhǔn)查詢),其他值為1(反向查詢)和2(服務(wù)器狀態(tài)請(qǐng)求)。 AA :表示授權(quán)回答(authoritative answer).
TC :表示可截?cái)嗟模╰runcated )
RD :表示期望遞歸
RA :表示可用遞歸
隨后3bit 必須為0
Rcode :返回碼,通常為0(沒有差錯(cuò))和3(名字差錯(cuò))
后面4個(gè)16bit 字段說明最后4個(gè)變長(zhǎng)字段中包含的條目數(shù)。
就我抓包所見,DNS 請(qǐng)求報(bào)文的標(biāo)志字段一般為0x0100
問題數(shù)字段是指這個(gè)DNS 請(qǐng)求中待解析的域名數(shù)目,一般是1,也即0x0001。對(duì)應(yīng)的DNS 響應(yīng)報(bào)文的問題數(shù)字段也置同樣的值
資源記錄數(shù)、授權(quán)資源記錄數(shù)、額外資源記錄數(shù)在DNS 請(qǐng)求報(bào)文中都為0,在響應(yīng)報(bào)文中視情況而定。
查詢問題字段的格式為
查詢名為要查找的名字,它由一個(gè)或者多個(gè)標(biāo)示符序列組成。每個(gè)標(biāo)示符已首字節(jié)數(shù)的計(jì)數(shù)值來說明該標(biāo)示符長(zhǎng)度,每個(gè)名字以0結(jié)束,計(jì)數(shù)字節(jié)數(shù)必須是0~63之間。該字段無(wú)需填
查詢類型一般為0x0001,表示是從host address解析IP
查詢類一般為0x0001,表示class IN
,DNS 請(qǐng)求報(bào)文和對(duì)應(yīng)的響應(yīng)報(bào)文中的查詢問題字段是完全一樣的 回答字段的格式如下
NAME 是該響應(yīng)報(bào)文對(duì)應(yīng)的
DNS 請(qǐng)求報(bào)文要解析的域名,可能是和查詢問題字段中的查詢名
完全一樣,但更多的情況下:
考慮到響應(yīng)報(bào)文中的查詢問題字段和請(qǐng)求報(bào)文完全一樣,
也就包含了查詢名,那么也可采用壓縮的方式來存放,即用一個(gè)16bit 的指針來指示NAME 的偏移量。比如0xC00C ,二進(jìn)制就是1100 0000 0000 1100,頭兩位為11表示這是一個(gè)雙字節(jié)的指針,而不是一個(gè)計(jì)數(shù)字節(jié)(上面提到了,查詢名里的計(jì)數(shù)字節(jié)為0~63,因此頭兩位不可能為11),后面的14位則表示這個(gè)壓縮指針?biāo)傅臄?shù)據(jù)離DNS 報(bào)文(也就是UDP 數(shù)據(jù)報(bào)的數(shù)據(jù)部分,不是指包含DNS 報(bào)文的UDP 數(shù)據(jù)報(bào)的報(bào)頭)頭部的偏移量是12。 生存時(shí)間以s 為單位
數(shù)據(jù)長(zhǎng)度是數(shù)據(jù)的字節(jié)數(shù)
響應(yīng)類和請(qǐng)求報(bào)文的查詢問題字段中的查詢類對(duì)應(yīng)
響應(yīng)類型我目前見到了兩種,一種是0x0001,這種情況下后面的數(shù)據(jù)是NAME 對(duì)應(yīng)的IP ,占4字節(jié);一種是0x0005,這種情況下后面的數(shù)據(jù)是NAME 重定向到的域名(比如重定向到),這里數(shù)據(jù)也用查詢名中的方式來存放重定向到的域名。
下面是實(shí)例解析,以www.baidu.com 為例 請(qǐng)求報(bào)文
響應(yīng)報(bào)文
,