国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

DNS實(shí)驗(yàn)報告

北京郵電大學(xué)計算機(jī)網(wǎng)絡(luò)課程設(shè)計實(shí)驗(yàn)報告課程設(shè)計題目:DNS 中繼服務(wù)器實(shí)驗(yàn)報告班級:2009211315班小組人員:李根 09211541曾若峰 09211544宮志明 09211545

北京郵電大學(xué)

計算機(jī)網(wǎng)絡(luò)課程設(shè)計

實(shí)驗(yàn)報告

課程設(shè)計題目:DNS 中繼服務(wù)器實(shí)驗(yàn)報告

班級:2009211315班

小組人員:李根 09211541

曾若峰 09211544

宮志明 09211545

,

一、 系統(tǒng)概述

1) 運(yùn)行環(huán)境:windows XP

2) 編譯: Microsoft visual C 6.0

3) 使用方法:

a) 使用ipconfig/all,記下當(dāng)前DNS 服務(wù)器,例如為10.3.9.3

b) 使用下頁的配置界面,將DNS 設(shè)置為127.0.0.1(本地主機(jī))

c) 運(yùn)行你的dnsrelay 程序(在你的程序中把外部dns 服務(wù)器設(shè)為前面記下的10.3.9.3)

d) 正常使用ping ,ftp ,IE 等,名字解析工作正常

二、 系統(tǒng)的功能設(shè)計

設(shè)計一個DNS 服務(wù)器程序,讀入“域名-IP 地址”對照表,當(dāng)客戶端查詢域名對應(yīng)的IP 地址時,用域名檢索該對照表,三種檢索結(jié)果:

1) 檢索結(jié)果為ip 地址0.0.0.0,則向客戶端返回“域名不存在”的報錯消息(不良網(wǎng)站攔截功能)

2) 檢索結(jié)果為普通IP 地址,則向客戶返回這個地址(服務(wù)器功能)

3) 表中未檢到該域名,則向因特網(wǎng)DNS 服務(wù)器發(fā)出查詢,并將結(jié)果返給客戶端(中繼功能)

考慮多個計算機(jī)上的客戶端會同時查詢,需要進(jìn)行消息ID 的轉(zhuǎn)換

三、 模塊劃分

DNS 服務(wù)器主模塊包含三個子模塊,分別如下:

1) 命令行參數(shù)處理模塊:該模塊用來處理通過命令行提示符來啟動這個DNS 服務(wù)器時所輸入的命令行參數(shù),管理員通過設(shè)置不同的參數(shù)可以使DNS 服務(wù)器顯示不同程度的提示和調(diào)試信息。所以這模塊主要是依照輸入的參數(shù)設(shè)置標(biāo)志數(shù)據(jù),以控制最后的各種信息的輸出。

2) 本地解析模塊:本模塊是在本DNS 服務(wù)器本地保存的曾經(jīng)解析過的或者需要屏蔽額域名和其對應(yīng)IP 信息文件中查找從應(yīng)用程序來的請求解析的域名,在這個文件中查到需要的域名后取出對應(yīng)的IP 地址,并構(gòu)造DNS 應(yīng)答數(shù)據(jù)包返回給發(fā)送此DNS 域名解析請求的應(yīng)用程序。

3) 外部DNS 服務(wù)器解析模塊:當(dāng)本地解析失敗時,本DNS 服務(wù)器會調(diào)用外部DNS 服務(wù)器解析模塊。此模塊將應(yīng)用程序發(fā)送的DNS 請求報文轉(zhuǎn)發(fā)給外部DNS 服務(wù)器,然后接收外部服務(wù)器返回的應(yīng)答信息,并根據(jù)這個信息給予應(yīng)用程序相應(yīng)的DNS 應(yīng)答。

三個模塊與主模塊的關(guān)系圖如下,主模塊調(diào)用這三個并列的模塊,而本地解析模塊調(diào)用文件查找子模塊:

,

,

四、 軟件流程圖

,

五、 主要數(shù)據(jù)結(jié)構(gòu)

int GetTable(char *tablePath) //函數(shù):獲取域名解析表

void GetUrl(char *recvbuf, int recvnum) //函數(shù):獲取DNS 請求中的域名

int IsFind(char* url, int num) //函數(shù):判斷是否在表中找到DNS 請求中的域名

unsigned short RegisterNewID (unsigned short oID, SOCKADDR_IN temp, BOOL ifdone) //函數(shù):將請求ID 轉(zhuǎn)換為新的ID ,并將信息寫入ID 轉(zhuǎn)換表中

void DisplayInfo(unsigned short newID, int find)

//函數(shù):打印 時間 newID 功能 域名 IP

六、 測試用例以及運(yùn)行結(jié)果

a) 測試本地解析功能

請求一個本地DNS 對照表中已有的某一記錄,如test1.com :

在本地DNS 對照表中找到記錄,將相應(yīng)的IP 地址返回給用戶:

程序上:

,

b) 測試中繼功能:

請求一個本地DNS 對照表中沒有的記錄,如www.baidu.com 。本地DNS 沒有找到相應(yīng)記錄,向外部web 服務(wù)器轉(zhuǎn)發(fā)請求,并接收相應(yīng)的應(yīng)答報文并轉(zhuǎn)發(fā)給用戶:

程序上:

測試ipv6功能:

程序:

c) 測試攔截功能:

請求一個不良網(wǎng)站,如test0.com :

被攔截。

程序上:

,

七、 調(diào)試中遇到并解決的問題

1) 使用socket 連接的時候,剛開始只用了一個socket 作為所有發(fā)送和接收的接口。在實(shí)際調(diào)試的過程中發(fā)現(xiàn)一個不能滿足軟件需求的實(shí)現(xiàn),所以用一個socket 負(fù)責(zé)發(fā)送數(shù)據(jù)報,另一個socket 負(fù)責(zé)接收數(shù)據(jù)報。

2) 回應(yīng)報文中域名是使用偏移指針的方式實(shí)現(xiàn)的,這是由于在域名段寫入需要請求的域名時會與問題報文中的域名字段重復(fù)從而造成不必要的浪費(fèi),用偏移指針的方式既可以防止重復(fù),也可以節(jié)省空間。

3) 使用sendto 函數(shù)時,一開始使用的是sizeof (sendbuf )來確定發(fā)送的數(shù)據(jù)報大小,但是實(shí)際操作中發(fā)現(xiàn)發(fā)送消息時只需要發(fā)送有用的部分,如果使用原來的方法會造成發(fā)送數(shù)據(jù)的冗余,需要精確確定發(fā)送數(shù)據(jù)的有效位數(shù)。

4) 在編程過程中,對于指針的掌握不當(dāng)造成了多次錯誤,例如在對于不同的標(biāo)志位要轉(zhuǎn)換成不同長度的指針進(jìn)行賦值。

5) 對于請求包的域名還原問題,需要注意數(shù)組下標(biāo)與實(shí)際位數(shù)的區(qū)別。

6) 本機(jī)會自動在其尾部追加“bupt.edu.cn ”來形成新的域名,導(dǎo)致在本地解析工作中無法找到該域名對應(yīng)的記錄,從而轉(zhuǎn)發(fā)給外部web 服務(wù)器,這與本地解析工作是相違背的。所以后來每當(dāng)在接收到寫有“bupt.edu.cn ”域名的時候,會逐層剝離此域名,從而達(dá)到域名解析的目的。

八、 我們的心得體會

本次大作業(yè)為實(shí)現(xiàn)一個DNS 中繼服務(wù)器。通過完成本地域名解析、中繼功能以及不良網(wǎng)站攔截等基本的三個功能,來實(shí)現(xiàn)用戶訪問外部服務(wù)器的需求。這次大作業(yè)的完成,需要我們閱讀并了解RFC 1035文檔。一開始的時候?qū)FC 完全沒有一個清晰地概念,只知道這是一個規(guī)格說明,而且初讀其中的內(nèi)容也覺得一頭霧水。但后來在老師的提點(diǎn)下抓住了重點(diǎn),然后一遍一遍反復(fù)的閱讀,不懂的地方借助網(wǎng)絡(luò)和圖書資料,漸漸發(fā)現(xiàn)對DNS 的原理和實(shí)現(xiàn)方法有了更加全面和深刻的理解,這對后期的程序編寫起到了非常大的幫助作用。 通過本次網(wǎng)絡(luò)實(shí)驗(yàn),對小型網(wǎng)絡(luò)應(yīng)用程序的實(shí)現(xiàn)有了一定程度的理解,同時更加熟悉了winsock 函數(shù)庫。通過抓包分析UDP 數(shù)據(jù)報文、DNS 數(shù)據(jù)報文,對傳輸層和應(yīng)用層的數(shù)據(jù)包發(fā)送和接收等工作原理也有了更深的理解。

在本次大作業(yè)中,讓我感觸最深的就是這三年來編程實(shí)力的反映。在編程的過程中就不斷的被一些低級錯誤影響了軟件實(shí)現(xiàn)的進(jìn)度,而且對在大一大二學(xué)到的知識點(diǎn),例如文件的讀取,不同進(jìn)制數(shù)的轉(zhuǎn)換等掌握不牢,導(dǎo)致需要花額外的時間去彌補(bǔ)以前遺忘的知識。在最終驗(yàn)收的階段,通過比較其他組同學(xué)的程序就可以很明顯的看出,自己程序的功能上比較單一,實(shí)現(xiàn)的方法也沒有他們來的精妙。繼而通過老師質(zhì)疑的幾個問題,也可以發(fā)現(xiàn)我們的程序還存在許多不足,例如思考的方面不夠全面,思考的角度不夠多向。細(xì)節(jié)反應(yīng)一個程序的健壯性,而我們沒有盡可能的考慮每一個可能的情況,導(dǎo)致仍存在許多漏洞。所以這次的大作業(yè)告訴了我們,在以后的學(xué)習(xí)與實(shí)踐中,要時刻注意“細(xì)節(jié)”的重要性。這個不僅要在軟件分析的時候要注意,在編程的時候要注意,在調(diào)試測試的時候要注意,在最后維護(hù)階段也不能放松。這次的收獲想必對未來從事的網(wǎng)絡(luò)工作很有益處。

無論程序好還是壞,最重要就是親手實(shí)踐。借鑒別人的好代碼永遠(yuǎn)只是模范,只有自己動手才會實(shí)現(xiàn)突破與創(chuàng)新。我們會在以后的學(xué)習(xí)與實(shí)踐中不斷提高自己的編程能力,日臻完善。

標(biāo)簽: