Dns数据包内容分析
IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫,能夠使用戶更方便的訪問互
聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串。通過主機(jī)名,
最終得到該主機(jī)名對(duì)應(yīng)的IP地址的過程叫做域名解析(或主機(jī)名解
析)。DNS協(xié)議運(yùn)行在UDP協(xié)議之上,使用端口號(hào)53。在RFC文檔
中RFC 2181對(duì)DNS有規(guī)范說明,RFC 2136對(duì)DNS的動(dòng)態(tài)更新進(jìn)行
說明,RFC 2308對(duì)DNS查詢的反向緩存進(jìn)行說明。
一、 域名的命名規(guī)則
1、 只能包含的字符
26個(gè)英文字母
“0,1,2,3,4,5,6,7,8,9”十個(gè)數(shù)字
“-”(英文中的連詞號(hào))
2、 字符組合規(guī)則
在域名中,不區(qū)分英文字母的大小寫
對(duì)于一個(gè)域名的長度是有一定限制的
域名例子:www.baidu.com
gd.122.gov.cn
www.chinaedu.edu.cn
www.zephyrproject.org
二、 域名請(qǐng)求數(shù)據(jù)包分析
如下圖為抓取的一個(gè)dns請(qǐng)求包:
Dns請(qǐng)求包的內(nèi)容如下:
2f 1f 01 00 00 01 00 00 00 00 00 00 03 64 77 6e
03 72 6f 6f 02 62 6f 00 00 01 00 01
各個(gè)字段內(nèi)容如下:
Transaction ID: 0x2f1f(2byte)
Flags: 0x0100 (2byte)
Questions: 1 (2byte)
Answer RRs: 0 (2byte)
Authority RRs: 0(2byte)
Additional RRs: 0(2byte)
Queries
Name: dwn.roo.bo (對(duì)應(yīng)03 64 77 6e 03 72 6f 6f 02 62 6f 00)
Type: A (Host Address) (1) (2byte)
Class: IN (0x0001) (2byte)
Dns信息中大部分項(xiàng)的長度都是確定的,唯一就是Queries中Name
的長度是不定的,
Name的編碼如下:Name: dwn.roo.bo (對(duì)應(yīng)03 64 77 6e 03 72
6f 6f 02 62 6f 00)
其中”.”作為分割符,如上面:dwn(對(duì)應(yīng)03 64 77 6e)表示這
一段長度為3,后面就是3個(gè)字符碼,后面的各段都是一樣方式,只
是在最后放置00表示結(jié)束。
三、 Dns應(yīng)答數(shù)據(jù)包分析
如下圖為應(yīng)答數(shù)據(jù)包
Dns應(yīng)答包的內(nèi)容如下:
2f 1f 81 80 00 01 00 02 00 00 00 00 03 64 77 6e
03 72 6f 6f 02 62 6f 00 00 01 00 01 03 64 77 6e
03 72 6f 6f 02 42 4f 00 00 05 00 01 00 00 01 ef
00 1c 03 64 77 6e 03 72 6f 6f 02 62 6f 01 77 09
61 6c 69 6b 75 6e 6c 75 6e 03 6e 65 74 00 c0 32
00 01 00 01 00 00 01 ef 00 04 70 5a 20 cc
各個(gè)字段內(nèi)容如下:
Domain Name System (response)
Transaction ID: 0x2f1f(2byte)
Flags: 0x8180 (2byte)
Questions: 1(2byte)
Answer RRs: 2(2byte)
Authority RRs: 0(2byte)
Additional RRs: 0(2byte)
Queries
Name: dwn.roo.bo (對(duì)應(yīng)03 64 77 6e 03 72 6f 6f 02 62 6f 00)
Type: A (Host Address) (1)(2byte)
Class: IN (0x0001)(2byte)
Answers
Name: dwn.roo.BO (對(duì)應(yīng)03 64 77 6e 03 72 6f 6f 02 42 4f 00)
Type: CNAME (5) (2byte)
Class: IN (0x0001)(2byte)
Time to live: 495(4byte)
Data length: 28(2byte)
CNAME: dwn.roo.bo.w.alikunlun.net (對(duì)應(yīng)03 64 77 6e 03 72 6f 6f 02 62 6f 01 77 09 61 6c 69 6b 75 6e 6c 75 6e 03 6e 65 74 00)
Name: dwn.roo.bo.w.alikunlun.net (2byte)
Type: A (Host Address) (1) (2byte)
Class: IN (0x0001)(2byte)
Time to live: 495(4byte)
Data length: 4(2byte)
Address: 112.90.32.204(4byte)
上面數(shù)據(jù)包中各個(gè)字段對(duì)應(yīng)關(guān)系都是比較明確的。
其中Answers中Name: dwn.roo.BO最后一個(gè)段變成大寫了,與
Queries中小寫不同,所以該name需要使用(03 64 77 6e 03 72
6f 6f 02 42 4f 00)表示,若相同,就可以采用指針方式指示,只
需要2byte就夠了。
而Answers中Name: dwn.roo.bo.w.alikunlun.net與CNAME:
dwn.roo.bo.w.alikunlun.net名稱完全相同,可以用指針方式(c0
32)表示Name: dwn.roo.bo.w.alikunlun.net。(c0 32)這兩個(gè)
byte中,最高兩bit為11,表示指正方式(非指正方式,最高兩bit
為00),剩下的14bit表示Name所在的位置為從DNS信息開頭的偏
移位置,這里就表示Name在DNS開始偏移0x32的長度位置,如下
面紅色標(biāo)示的內(nèi)容即從DNS 0x32位置開始。
2f 1f 81 80 00 01 00 02 00 00 00 00 03 64 77 6e
03 72 6f 6f 02 62 6f 00 00 01 00 01 03 64 77 6e
03 72 6f 6f 02 42 4f 00 00 05 00 01 00 00 01 ef
00 1c
下面就是從0x32位置開始的內(nèi)容Name。
03 64 77 6e 03 72 6f 6f 02 62 6f 01 77 09
61 6c 69 6b 75 6e 6c 75 6e 03 6e 65 74 00
總結(jié)
以上是生活随笔為你收集整理的Dns数据包内容分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中mysql的优化,Java培训
- 下一篇: 网络爬虫学习1 - 使用 request