自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

DNS協(xié)議詳解

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
DNS是域名系統(tǒng)的縮寫,該系統(tǒng)用于命名組織到域?qū)哟谓Y(jié)構(gòu)中的計(jì)算機(jī)和網(wǎng)絡(luò)服務(wù)。DNS是因特網(wǎng)的一項(xiàng)核心服務(wù),它作為可以將域名和IP地址相互映射的一個分布式數(shù)據(jù)庫。

foxmail新版中有一個《郵件特快專遞》的功能。起先搞不懂如何用,后來知道要在 工具->系統(tǒng)選項(xiàng) 那邊設(shè)置 本地DNS服務(wù)器的IP地址。

覺得這個新功能蠻好用的。不需要通過SMTP代理,可以直接通過本地往郵箱所在的郵件交換器發(fā)送郵件。在暑假一開始想在VC++中實(shí)現(xiàn)這個功能。用IRIS截包后,發(fā)現(xiàn)程序后mx8.263.net發(fā)送郵箱,不知道這個是什么東西所以作罷。   后來才想到這個就是263.net的MX記錄主機(jī),原來特快專遞的原理就是往這個主機(jī)上發(fā)送數(shù)據(jù)就行。

運(yùn)行nslookup程序:

set type=mx

263.net

有了,有了,得到結(jié)果:

Non-authoritative answer:

263.net MX preference = 10, mail exchanger = mx06.263.net

263.net MX preference = 10, mail exchanger = mx08.263.net

263.net MX preference = 10, mail exchanger = mx09.263.net

263.net MX preference = 10, mail exchanger = mx11.263.net

263.net MX preference = 10, mail exchanger = mx12.263.net

263.net MX preference = 40, mail exchanger = mx03.263.net

263.net MX preference = 10, mail exchanger = mx01.263.net

沒有錯了。就是這個了。后來因?yàn)椴恢涝趺磳?shí)現(xiàn)nslookup的功能,就放棄了,學(xué)了半個多月的C#。后來偶然在網(wǎng)上查找到了一些相關(guān)的文檔。幾次實(shí)驗(yàn)。把我的開發(fā)過程拿過來分享,我***次寫教程性文檔。所以不規(guī)范之處,請大家包涵。本文涉及的域名、郵箱及IP均為真實(shí)的。

二、DNS協(xié)議原理

我認(rèn)為,要想成為一個好的網(wǎng)絡(luò)軟件程序員,必須得讀懂RFC文檔。因?yàn)楸疚氖敲嫦虼蠖鄰V泛程序愛好者,所以我盡量從細(xì)節(jié)上寫,如果高手的話,可以跳過此部分。

DNS協(xié)議的相關(guān)RFC文檔:

RFC1034-《DOMAIN NAMES - CONCEPTS AND FACILITIES》

RFC1035-《DOMAIN NAMES - IMPLEMENTATION AND SPECIFICATION》

網(wǎng)上的計(jì)算機(jī)用形如 220.162.75.1 這樣稱為IP地址的數(shù)字串來標(biāo)識一臺計(jì)算機(jī)。而如果每次訪問一臺計(jì)算機(jī)都是通過輸入這樣的東東來訪問,那不就太可怕了?以是出了DNS這樣的好東東,用要指示其綁定的IP地址,當(dāng)我們在瀏覽器內(nèi)輸入 http://zzsy.com 時,瀏覽器不知道網(wǎng)頁該到哪里取,于是就向設(shè)定好的DNS服務(wù)器查詢zzsy.com這個域名。DNS服務(wù)器會先尋找自己的記錄庫,如果沒有發(fā)現(xiàn)就轉(zhuǎn)向上一級DNS服務(wù)器進(jìn)行查詢(轉(zhuǎn)發(fā)請求)。把找到后的IP告知你的瀏覽器。這里邊瀏覽器查詢的記錄類型是A記錄。RFC1035文檔第11頁中定義有16種記錄類型,而常見的有A(地址)記錄、CNAME(別名)記錄、MX(郵件交換)記錄。我們本篇要關(guān)心的是MX記錄。

查詢的過程一般是:客戶向DNS服務(wù)器的53端口發(fā)送UDP報(bào)文,DNS服務(wù)器收到后進(jìn)行處理,并把結(jié)果記錄仍以UDP報(bào)文的形式返回過來。

此UDP報(bào)文的一般格式:

+---------------------+

| 報(bào)文頭 |

+---------------------+

| 問題  | 向服務(wù)器提出的查詢部分

+---------------------+

| 回答  | 服務(wù)器回復(fù)的資源記錄

+---------------------+

| 授權(quán) | 權(quán)威的資源記錄

+---------------------+

| 格外的 | 格外的資源記錄

+---------------------+

除了報(bào)文頭是固定的12字節(jié)外,其他每一部分的長度均為不定字節(jié)數(shù)。

我們在這邊關(guān)心的是報(bào)文頭、問題、回答這三個部分。

其中報(bào)文頭的格式:

1 1 1 1 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| ID |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

|QR| Opcode |AA|TC|RD|RA| Z | RCODE |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| QDCOUNT |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| ANCOUNT |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| NSCOUNT |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| ARCOUNT |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

好家伙,是什么鬼畫符!

其中最上邊是位的數(shù)字標(biāo)識,0-15(注意,后邊的10-15寫成上下的形式了,一開始我楞沒看懂)。#p#

接下來是:

ID:占16位,2個字節(jié)。此報(bào)文的編號,由客戶端指定。DNS回復(fù)時帶上此標(biāo)識,以指示處理的對應(yīng)請應(yīng)請求。

QR:占1位,1/8字節(jié)。0代表查詢,1代表DNS回復(fù)

Opcode:占4位,1/2字節(jié)。指示查詢種類:0:標(biāo)準(zhǔn)查詢;1:反向查詢;2:服務(wù)器狀態(tài)查詢;3-15:未使用。

AA:占1位,1/8字節(jié)。是否權(quán)威回復(fù)。

TC:占1位,1/8字節(jié)。因?yàn)橐粋€UDP報(bào)文為512字節(jié),所以該位指示是否截掉超過的部分。

RD:占1位,1/8字節(jié)。此位在查詢中指定,回復(fù)時相同。設(shè)置為1指示服務(wù)器進(jìn)行遞歸查詢。

RA:占1位,1/8字節(jié)。由DNS回復(fù)返回指定,說明DNS服務(wù)器是否支持遞歸查詢。

Z:占3位,3/8字節(jié)。保留字段,必須設(shè)置為0。

RCODE:占4位,1/2字節(jié)。由回復(fù)時指定的返回碼:0:無差錯;1:格式錯;2:DNS出錯;3:域名不存在;4:DNS不支持這類查詢;5:DNS拒絕查詢;6-15:保留字段。

QDCOUNT:占16位,2字節(jié)。一個無符號數(shù)指示查詢記錄的個數(shù)。

ANCOUNT:占16位,2字節(jié)。一個無符號數(shù)指明回復(fù)記錄的個數(shù)。

NSCOUNT:占16位,2字節(jié)。一個無符號數(shù)指明權(quán)威記錄的個數(shù)。

ARCOUNT:占16位,2字節(jié)。一個無符號數(shù)指明格外記錄的個數(shù)。

其中每個查詢的資源記錄格式:

1 1 1 1 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| |

/ QNAME /

/ /

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| QTYPE |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| QCLASS |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

QNAME:不定長,表示要查詢的域名。(兩邊的方框用 / 來表示不定長)

QTYPE:2字節(jié),根據(jù)RFC1035及nslookup的幫助文檔,我定義以下枚舉類型:

enum QueryType //查詢的資源記錄類型。

{

A=0x01, //指定計(jì)算機(jī) IP 地址。

NS=0x02, //指定用于命名區(qū)域的 DNS 名稱服務(wù)器。

MD=0x03, //指定郵件接收站(此類型已經(jīng)過時了,使用MX代替)

MF=0x04, //指定郵件中轉(zhuǎn)站(此類型已經(jīng)過時了,使用MX代替)

CNAME=0x05, //指定用于別名的規(guī)范名稱。

SOA=0x06, //指定用于 DNS 區(qū)域的“起始授權(quán)機(jī)構(gòu)”。

MB=0x07, //指定郵箱域名。

MG=0x08, //指定郵件組成員。

MR=0x09, //指定郵件重命名域名。

NULL=0x0A, //指定空的資源記錄

WKS=0x0B, //描述已知服務(wù)。

PTR=0x0C, //如果查詢是 IP 地址,則指定計(jì)算機(jī)名;否則指定指向其它信息的指針。

HINFO=0x0D, //指定計(jì)算機(jī) CPU 以及操作系統(tǒng)類型。

MINFO=0x0E, //指定郵箱或郵件列表信息。

MX=0x0F, //指定郵件交換器。

TXT=0x10, //指定文本信息。

AAAA=0x1c,//IPV6資源記錄。

UINFO=0x64, //指定用戶信息。

UID=0x65, //指定用戶標(biāo)識符。

GID=0x66, //指定組名的組標(biāo)識符。

ANY=0xFF //指定所有數(shù)據(jù)類型。

};

QTYPE:2字節(jié)。 根據(jù)RFC1035及nslookup的幫助文檔,我定義以下枚舉類型:

enum QueryClass //指定信息的協(xié)議組。

{

IN=0x01, //指定 Internet 類別。

CSNET=0x02, //指定 CSNET 類別。(已過時)

CHAOS=0x03, //指定 Chaos 類別。

HESIOD=0x04,//指定 MIT Athena Hesiod 類別。

ANY=0xFF //指定任何以前列出的通配符。

};

QTYPE中的A,MX,CNAME為常用,QCLASS中的IN為常用。#p#

其中每個回復(fù)的記錄格式:

1 1 1 1 1 1

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| |

/ /

/ NAME /

| |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| TYPE |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| CLASS |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| TTL |

| |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

| RDLENGTH |

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|

/ RDATA /

/ /

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

NAME:回復(fù)查詢的域名,不定長。

TYPE:回復(fù)的類型。2字節(jié),與查詢同義。指示RDATA中的資源記錄類型。

CLASS:回復(fù)的類。2字節(jié),與查詢同義。指示RDATA中的資源記錄類。

TTL:生存時間。4字節(jié),指示RDATA中的資源記錄在緩存的生存時間。

RDLENGTH:長度。2字節(jié),指示RDATA塊的長度。

RDATA:資源記錄。不定義,依TYPE的不同,此記錄的格示不同,通常一個MX記錄是由一個2字節(jié)的指示該郵件交換器的優(yōu)先級值及不定長的郵件交換器名組成的。

這邊述說一下名稱的組合形式。名稱由多個標(biāo)識序列組成,每一個標(biāo)識序列的首字節(jié)說明該標(biāo)識符的長度,接著用是ASCII碼表示字符,多個序列之后由字節(jié)0表示名字結(jié)束。其中某一個標(biāo)識序列的首字符的長度若是0xC0的話,表示下一字節(jié)指示不是標(biāo)識符序列,而是指示接下部分在本接收包內(nèi)的偏移位置。

比如 bbs.zzsy.com 以.分開bbs、zzsy、com三個部分。每個部分的長度為3、4、3

在DNS報(bào)文中的形式就如 3 b b s 4 z z s y 3 c o m 0

假如在包內(nèi)的第12個字節(jié)位置存在有 4 z z s y 3 c o m 0 這樣的名稱了。

那此時有可能為:3 b b s 4 z z s y 0xC0 0x0C 這樣的形式。

三、DNS協(xié)議實(shí)例講解

說了這么多理論屁話,可能頭都有兩個大了吧。還是用一個實(shí)例的方法來說明吧。

我選用著名的網(wǎng)絡(luò)截包及協(xié)議分析工具IRIS 4.05,您可以從我的站點(diǎn)上下載:

http://itboy.cn/data/Iris405Full.rar

運(yùn)行Iris,點(diǎn)擊菜單的Filters 選 Port標(biāo)簽頁 運(yùn)用 53 端口后點(diǎn)確定。

點(diǎn)擊Iris工具欄上的綠色運(yùn)行圖標(biāo)進(jìn)行監(jiān)聽。

在windows中運(yùn)行nslookup程序。

輸入以下命令:

set type=mx

然后返回nslookup程序。

再輸入命令:

yahoo.com.cn

會得到

yahoo.com.cn MX preference = 20, mail exchanger = mx5.mail.yahoo.com

yahoo.com.cn MX preference = 10, mail exchanger = mta-v1.mail.

● DNS報(bào)文格式:

 

 

該報(bào)文由12字節(jié)的首部和4個長度可變的字段組成。

標(biāo)識字段由客戶程序設(shè)置并有服務(wù)器返回結(jié)果。#p#

16bit的標(biāo)志字段 如下:

 

 

QR:0表示查詢報(bào)文,1表示響應(yīng)報(bào)文

Opcode:通常值為0(標(biāo)準(zhǔn)查詢),其他值為1(反向查詢)和2(服務(wù)器狀態(tài)請求)。

AA:表示授權(quán)回答(authoritative answer).

TC:表示可截?cái)嗟?truncated)

RD:表示期望遞歸

RA:表示可用遞歸

隨后3bit必須為0

Rcode:返回碼,通常為0(沒有差錯)和3(名字差錯)

后面4個16bit字段說明***4個變長字段中包含的條目數(shù)。

問題部分:

報(bào)文格式:

 

 

查詢名為要查找的名字,它由一個或者多個標(biāo)示符序列組成。每個標(biāo)示符已首字節(jié)數(shù)的計(jì)數(shù)值來說明該標(biāo)示符長度,每個名字以0結(jié)束。計(jì)數(shù)字節(jié)數(shù)必須是0~63之間。該字段無需填充字節(jié)。如:gemini.tuc.noao.edu

 

 

每個問題有一個查詢類型,通常查詢類型為A(由名字獲得IP地址)或者PTR(獲得IP地址對應(yīng)的域名)

資源記錄部分:

報(bào)文格式:

DNS***3個字段,回答字段,授權(quán)字段和附加信息字段均采用資源記錄RR(Resource Record)的相同格式。

 

 

域名是記錄中資源數(shù)據(jù)對應(yīng)的名字。它的格式和查詢名字段格式相同。

類型說明R R的類型碼。類通常為1,指I n t e r n e t數(shù)據(jù)。

生存時間字段是客戶程序保留該資源記錄的秒數(shù)。

資源數(shù)據(jù)長度說明資源數(shù)據(jù)的數(shù)量。該數(shù)據(jù)的格式依賴于類型字段的值。對于類型1(A記錄)資源數(shù)據(jù)是4字節(jié)的I P地址。

● 數(shù)據(jù)包DNS 查詢:(DNS query)

0000 00 19 56 6e 19 bf 00 17 a4 1a b2 e0 08 00 45 00 ..Vn.... ......E.

0010 00 3b ed c6 00 00 80 11 e3 c3 ac 15 0f 04 ac 15 .;...... ........

0020 01 f9 04 a9 00 35 00 27 2f bd 3e 3a 01 00 00 01 .....5.' /.>:....

0030 00 00 00 00 00 00 03 77 77 77 06 67 6f 6f 67 6c .......w ww.googl

0040 65 02 63 6e 00 00 01 00 01 e.cn.... .

說明:

前面三段分別為以太網(wǎng)包頭,ip包頭和UDP包頭。

從0020行后面開始為DNS數(shù)據(jù)包.

3e 3a 為標(biāo)識字段

01 00 為標(biāo)志字段,該字段設(shè)置了TC表示該報(bào)文是可截?cái)嗟摹?/p>

00 01 查詢報(bào)文數(shù)量為1。

00 00 00 00 00 00 表示回答,授權(quán)和額外信息都為0。

03 77 77 77 06 67 6f 6f 67 6c 65 02 63 6e 00 表示查詢的名字為

www.google.com

00 01 為類型,1表示A查詢

00 01 為類,1表示Internet數(shù)據(jù)。

數(shù)據(jù)包 DNS response (DNS response)

0000 00 17 a4 1a b2 e0 00 19 56 6e 19 bf 08 00 45 00 ........ Vn....E.

0010 00 78 48 af 00 00 7d 11 8b 9e ac 15 01 f9 ac 15 .xH...}. ........

0020 0f 04 00 35 04 a9 00 64 75 db 3e 3a 81 80 00 01 ...5...d u.>:....

0030 00 03 00 00 00 00 03 77 77 77 06 67 6f 6f 67 6c .......w ww.googl

0040 65 02 63 6e 00 00 01 00 01 c0 0c 00 05 00 01 00 e.cn.... ........

0050 00 05 42 00 11 02 63 6e 01 6c 06 67 6f 6f 67 6c ..B...cn .l.googl

0060 65 03 63 6f 6d 00 c0 2b 00 01 00 01 00 00 00 5f e.com..+ ......._

0070 00 04 cb d0 21 65 c0 2b 00 01 00 01 00 00 00 5f ....!e.+ ......._

0080 00 04 cb d0 21 64 ....!d

說明:

前面三段分別為以太網(wǎng)包頭,ip包頭和UDP包頭。

3e 3a 為標(biāo)識字段

81 80 為標(biāo)志字段,其中設(shè)置了QR = 1,RD = 1,RA = 1

00 01 問題數(shù)1,00 03 回答數(shù)3,其余兩個為0。

03 77 77 77 06 67 6f 6f 67 6c 65 02 63 6e 00 表示查詢的名字為

www.google.com

00 01 為類型,1表示A查詢

00 01 為類,1表示Internet數(shù)據(jù)。

接下來為回答報(bào)文,

c0 0c 為域名指針

00 05 表示CNAME(規(guī)范名稱)

00 01 類,表示為Internet數(shù)據(jù)

00 00 05 42 生存時間

00 11 數(shù)據(jù)長度

02 63 6e 01 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 為數(shù)據(jù) cn.l.google.cn

然后接下來兩段為另外兩個回答。

***的數(shù)據(jù)為IP地址

 

責(zé)任編輯:林琳 來源: Chinaunix
相關(guān)推薦

2010-09-27 14:10:29

DNS協(xié)議簡介

2014-10-14 09:36:01

DNS

2010-09-28 09:34:28

2019-11-29 07:53:07

DNSTCP網(wǎng)絡(luò)協(xié)議

2010-11-09 17:19:41

2021-04-30 06:34:20

網(wǎng)絡(luò)知識DNS 訪問原理DNS服務(wù)器

2019-08-23 06:36:32

2010-09-07 17:13:54

SIP協(xié)議詳解

2014-11-27 09:38:12

2010-09-08 18:09:01

雙協(xié)議棧

2021-05-19 08:40:36

DNS 協(xié)議查詢

2018-05-23 10:59:14

DNS原理解析

2010-08-29 20:46:53

DHCP協(xié)議

2011-11-21 15:50:52

BGPBGP路由

2013-06-07 10:04:17

EIGRP路由協(xié)議Cisco

2014-06-05 10:21:29

HTTP

2024-10-22 16:54:14

2019-06-04 14:38:36

2021-01-19 05:49:44

DNS協(xié)議

2019-06-12 14:18:31

TCPIP協(xié)議DNS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號