




已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
此文檔收集于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系網(wǎng)站刪除網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì)指導(dǎo)教師: 學(xué)生班級: 網(wǎng)絡(luò)10802 學(xué)生姓名: 學(xué) 號: 班內(nèi)序號: 21 課設(shè)日期:2011/7/52011/7/12 目 錄一、課程設(shè)計(jì)目的與任務(wù)3二、設(shè)計(jì)任務(wù)及要求31、RAW模式的SOCKET編程32、具體內(nèi)容3三、需求分析4四、總體設(shè)計(jì)(流程圖)5五、詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)6六、實(shí)現(xiàn)結(jié)果及結(jié)果分析11七、使用說明14八、課設(shè)小結(jié)14一、課程設(shè)計(jì)目的與任務(wù)網(wǎng)絡(luò)協(xié)議編程課程設(shè)計(jì)是學(xué)習(xí)TCP/IP協(xié)議分析課程后的一個重要實(shí)踐環(huán)節(jié),是對學(xué)生進(jìn)行的一次較為全面的網(wǎng)絡(luò)協(xié)議分析應(yīng)用程序設(shè)計(jì)訓(xùn)練。其基本目的是:(1)培養(yǎng)學(xué)生理論聯(lián)系實(shí)際的設(shè)計(jì)思想,訓(xùn)練綜合運(yùn)用所學(xué)的基礎(chǔ)理論知識,結(jié)合生產(chǎn)實(shí)際分析和解決網(wǎng)絡(luò)應(yīng)用中基本問題的能力,從而使基礎(chǔ)理論知識得到鞏固和加深。(2)訓(xùn)練學(xué)生運(yùn)用軟件工程的原理、方法和工具完整地設(shè)計(jì)并開發(fā)一個網(wǎng)絡(luò)應(yīng)用系統(tǒng),歷練軟件工程常規(guī)設(shè)計(jì)過程和基本方法。為將來的實(shí)際應(yīng)用開發(fā)打好基礎(chǔ)。(3)深層次掌握TCP/IP協(xié)議的基本原理與數(shù)據(jù)格式。(4)熟悉并掌握網(wǎng)絡(luò)通信協(xié)議Socket編程的方法。 二、設(shè)計(jì)任務(wù)及要求1、RAW模式的SOCKET編程PING程序是面向用戶的應(yīng)用程序,該程序使用ICMP的封裝機(jī)制,通過IP協(xié)議來工作為了實(shí)現(xiàn)直接對IP和ICMP包進(jìn)行操作,實(shí)驗(yàn)中使用RAW模式的SOCKET編程。熟悉SOCKET的編程,包括基本的系統(tǒng)調(diào)用如SOCKET、BIND等。2、具體內(nèi)容1) 定義數(shù)據(jù)結(jié)構(gòu)需要定義好IP數(shù)據(jù)報(bào)、ICMP包等相關(guān)的數(shù)據(jù)結(jié)構(gòu)2) 程序?qū)崿F(xiàn)在WINDOWS環(huán)境下實(shí)現(xiàn)PING程序3) 程序要求在窗體文本框中輸入: PING .其中為目的主機(jī)的IP地址,不要求支持域名,對是否帶有開關(guān)變量也不做要求。不帶開關(guān)變量時(shí),要求返回4次響應(yīng)。返回信息顯示在窗體上: REPLY FROM .或 REQUEST TimeOut (無法PING通的情況) (3)實(shí)驗(yàn)步驟和注意事項(xiàng)1、 熟悉IP以及ICMP協(xié)議的工作機(jī)制2、 熟悉RAW模式的SOCKET編程3、 編寫PING的實(shí)現(xiàn)程序4、 編譯環(huán)境中需要包括SOCKET庫 WS2_32.lib5、 在模擬實(shí)現(xiàn)環(huán)境下調(diào)試并運(yùn)行自己編寫的PING程序三、需求分析在帶界面的PING程序中最基本的需要是用以輸入IP的文本框,顯示reply的文本框和幾個基本按鈕。這個要事先知道在PING .后的reply要返回哪些內(nèi)容,上面已經(jīng)要求返回4次響應(yīng),每次相應(yīng)的reply就以我們平時(shí)在doc下ping的結(jié)果為模板REPLY FROM .:Bytes=XX TTL=XXX Time=XXms.雖然要求為目的主機(jī)的IP地址,不要求支持域名但域名的轉(zhuǎn)換還是蠻簡單的固定代碼就加上去了。也添加了兩個清空的按鈕以便于用戶使用。四、總體設(shè)計(jì)(流程圖)A ping B結(jié) 束將ICMP封裝到IP數(shù)據(jù)報(bào)中并發(fā)送給B計(jì)算校驗(yàn)和、獲取ip封裝ICMP接受B的回復(fù)判斷接受字節(jié)數(shù)是否為0解析收到的報(bào)文核實(shí)收到的ID號和發(fā)送的是否一致丟棄返回目地IP、字節(jié)數(shù)、TTL值、時(shí)間戳是否不一致一致五、詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)1.用vc新建一個MFC對話框工程,從控件中拖入靜態(tài)文本右擊屬性修改id和標(biāo)題,類似的再拖入其他的編輯框和按鈕,在顯示reply的編輯框的屬性中要勾選只讀,這樣既可以無法修改reply又可以節(jié)省復(fù)制粘貼的代碼。在界面大致完成的時(shí)候界面如下: 圖一:完成界面結(jié)構(gòu)因?yàn)槟J(rèn)的是白色所以在Initlnstance()中添加SetDialogBkColor (RGB (128, 184, 223), RGB ( 0, 0 , 150 ) );使得界面的背景色變?yōu)樗{(lán)色。 圖二:改變背景BOOL CPingApp:InitInstance()SetDialogBkColor (RGB (128, 184, 223), RGB ( 0, 0 , 150 ) );覺得通用的.ico圖片不是我想要的便換了一張。在此時(shí)運(yùn)行得到的界面效果是: 圖三:沒有任何的功能的藍(lán)色界面效果2.接下來就是在.cpp文件中添加相應(yīng)的代碼以實(shí)現(xiàn)老師和自己的要求。首先是定義ip和icmp 的首部,這些代碼是固定的所以直接復(fù)制粘貼了。typedef struct ip_hdr /定義IP首部 unsigned char h_verlen; /4位首部長度,4位IP版本號 unsigned char tos; /8位服務(wù)類型TOS unsigned short total_len; /16位總長度(字節(jié)) unsigned short ident; /16位標(biāo)識 unsigned short frag_and_flags;/3位標(biāo)志位 unsigned char ttl; /8位生存時(shí)間 TTL unsigned char proto; /8位協(xié)議 (TCP, UDP 或其他) unsigned short checksum; /16位IP首部校驗(yàn)和 unsigned int sourceIP; /32位源IP地址 unsigned int destIP; /32位目的IP地址 IP_HEADER; typedef struct icmp_hdr BYTE i_type; / ICMP報(bào)文類型 BYTE i_code; / ICMP代碼 USHORT i_cksum; / 校驗(yàn)和 USHORT i_id; / 標(biāo)志符 USHORT i_seq; / 序號 ULONG timestamp; / 時(shí)間戳 ICMP_HEADER;3.初始化void CPingDlg:OnPing() /初始化/ TODO: Add your control notification handler code hereint rect; WSADATA WSAData; if (WSAStartup(MAKEWORD(2,2), &WSAData) != 0 ) printf (WSAStartup Error!n); /如果初始化不成功則報(bào)錯exit(0); SOCKET sock4; for(int i=0; i h_addr_list0); ICMP_HEADER icmpHeader; SOCKADDR_IN addr_in,addr_from; char recvbuf1024; socki= socket(AF_INET, SOCK_RAW, IPPROTO_ICMP); int nTimeOut = 1000; /超時(shí)毫秒/設(shè)置發(fā)送超時(shí)和接收超時(shí)setsockopt(socki, SOL_SOCKET, SO_SNDTIMEO, (char*)&nTimeOut, sizeof(nTimeOut); setsockopt(socki, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeOut, sizeof(nTimeOut); memset(&addr_in, 0, sizeof(addr_in); addr_in.sin_family = AF_INET; /為網(wǎng)絡(luò)地址類型,一般為AF_INETaddr_in.sin_addr.S_un.S_addr = inet_addr(ip); /IP/設(shè)置數(shù)據(jù)報(bào)頭memset(&icmpHeader, 0, sizeof(icmpHeader); icmpHeader.i_type = 8; icmpHeader.i_code = 0; icmpHeader.i_cksum = 0; icmpHeader.i_id = (USHORT)GetCurrentProcessId(); icmpHeader.i_seq = 0; icmpHeader.timestamp = GetTickCount(); icmpHeader.i_cksum = checksum(USHORT*)&icmpHeader, sizeof(icmpHeader); /發(fā)送一個icmpHeaderrect = sendto(socki, (char*)&icmpHeader, sizeof(icmpHeader), 0, (sockaddr*)&addr_in, sizeof(addr_in); int addr_from_len; addr_from_len = sizeof(addr_from); /接收的數(shù)據(jù)報(bào)為IP頭+ICMP頭rect = recvfrom(socki, recvbuf, sizeof(recvbuf), 0, (sockaddr*)&addr_from, &addr_from_len);/rect為接收的字節(jié)數(shù) if(rect0)/正確就調(diào)用DecodeHeader輸出DecodeHeader(recvbuf, rect); else CString reply=REQUEST TimeOut!;SetDlgItemText(IDC_REPLY,reply);closesocket(socki); WSACleanup(); 用于初始化各個全局變量,為全局變量賦初始值;初始化,加載庫。定義一個Cstring reply用以輸出。例如當(dāng)超時(shí)時(shí)便輸出REQUEST TimeOut!CString reply=REQUEST TimeOut!;SetDlgItemText(IDC_REPLY,reply);域名轉(zhuǎn)換:hostent *hp=gethostbyname(ip);/域名轉(zhuǎn)換成IPif(hp!=NULL)ip=inet_ntoa(*(struct in_addr*)hp- h_addr_list0); 4.在CDlg中添加函數(shù)USHORT CPingDlg:checksum(USHORT *buffer, int size) 圖四:添加cheksum()函數(shù)checksum()函數(shù)用于計(jì)算校驗(yàn)和。計(jì)算過程是首先把數(shù)據(jù)報(bào)頭中的校驗(yàn)和字段設(shè)置為0,然后對首部中每個16bit 進(jìn)行二字段進(jìn)制反碼求和(整個首部看成是由一串16bit的字組成),結(jié)果存在校驗(yàn)和字段中。其中buffer 用于存放ICMP數(shù)據(jù),size表示ICMP報(bào)文大小。USHORT CPingDlg:checksum(USHORT *buffer, int size)unsigned long cksum=0; while(size 1) cksum+=*buffer+; size -=sizeof(USHORT); if(size ) /若size為奇數(shù) cksum += *(UCHAR*)buffer; cksum = (cksum 16) + (cksum & 0xffff); cksum += (cksum 16); return (USHORT)(cksum); 5.添加函數(shù)void CPingDlg:DecodeHeader(char *buf, int len)解讀報(bào)頭函數(shù)在初始化中if(rect0)DecodeHeader(recvbuf, rect); 即正確時(shí)就調(diào)用DecodeHeader輸出 if (icmpHeader-i_id != (USHORT)GetCurrentProcessId() /核實(shí)收到的ID號和發(fā)送的是否一致 printf(someone elses packet!n);return; CString reply;reply.Format(Reply from %s: Bytes= %d TTL = %d Time= %d ms.rn, inet_ntoa(addr), len, ipHeader-ttl, Time1-icmpHeader-timestamp);m_reply+=reply;SetDlgItemText(IDC_REPLY,m_reply+ping is complete!);/Sleep(500);6.添加自己加上去的小函數(shù)重置:因?yàn)檩斎雐p/域名的id設(shè)為了IDC_IP所以GetDlgItem(IDC_IP)-SetWindowText();便可以實(shí)現(xiàn)重置ip/域名六、實(shí)現(xiàn)結(jié)果及結(jié)果分析在運(yùn)行后產(chǎn)生.exe文件雙擊此文件便可運(yùn)行。1.用本機(jī)測試: Ping TTL即為生存值,每經(jīng)過一個路由器值便減少1,因?yàn)闉楸緳C(jī)所以沒有經(jīng)過任何一個路由器,故為最大值128,Time為時(shí)間戳,在本機(jī)變?yōu)?.2.在斷網(wǎng)時(shí)無法訪問百度故拋出異常 Ping 3.聯(lián)網(wǎng)時(shí) Ping 要訪問百度用的是域名,先經(jīng)過轉(zhuǎn)換為ip。因?yàn)樵L問百度必然是要經(jīng)過路由器所以TTL值小于128,時(shí)間戳也會不一樣。4.重置 當(dāng)不想ping這個ip或者域名時(shí)單擊這個“重置”按鈕。七、使用說明直接在“ip/域名:”后面的編輯框中輸入ip或者域名,點(diǎn)擊“ping”按鈕即可在下面只讀的藍(lán)色編輯框中顯示回復(fù)的信息。如果不想ping某一個ip或者域名可以點(diǎn)擊“重置”鍵可再次輸入ip或者域名。因?yàn)榍蹇真I(clear)的設(shè)置問題貌似是實(shí)現(xiàn)了清空但在沒有關(guān)閉的情況下上一次的顯示結(jié)果在下一次還是會再次顯示。八、課設(shè)小結(jié) TCP/IP這門課
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海洋石油鉆采工程安全生產(chǎn)措施考核試卷
- 嵌入式系統(tǒng)信號處理模式考題及答案
- 公路工程未來趨勢試題及答案解析
- 豆類食品加工廠的安全生產(chǎn)標(biāo)準(zhǔn)化考核試卷
- 窄軌機(jī)車車輛制造中的技術(shù)創(chuàng)新與研發(fā)考核試卷
- 金屬廚房用具的經(jīng)銷商關(guān)系維護(hù)考核試卷
- 公路建設(shè)程序與審批試題及答案
- 數(shù)據(jù)庫維護(hù)與故障排查試題及答案
- 農(nóng)業(yè)作物病害診斷儀應(yīng)用考核試卷
- 數(shù)據(jù)庫性能監(jiān)控的重要性與實(shí)施方法試題及答案
- 北京北大方正軟件職業(yè)技術(shù)學(xué)院《實(shí)踐中的馬克思主義新聞觀》2023-2024學(xué)年第二學(xué)期期末試卷
- 對外漢語教學(xué)中的文化負(fù)載詞教學(xué)策略研究
- 2025年下半年甘肅張掖市山丹縣事業(yè)單位招聘112人(第二批)易考易錯模擬試題(共500題)試卷后附參考答案
- 血液透析常用藥物
- 2025-2030中國釀酒行業(yè)市場發(fā)展現(xiàn)狀及商業(yè)模式與投資發(fā)展研究報(bào)告
- 浙江開放大學(xué)2025年《社會保障學(xué)》形考任務(wù)1答案
- 初中生物人體的骨骼肌 2024-2025學(xué)年七年級生物下冊(北師大版2024)
- 河道整治施工組織設(shè)計(jì)(技術(shù)標(biāo))
- DeepSeek賦能設(shè)計(jì)行業(yè):AI提示詞生成與3D建模自動化
- 2025至2030中國高效染料敏化太陽能電池市場深度調(diào)查與前景預(yù)測研究報(bào)告
- 2025年江蘇省南通市如東縣實(shí)驗(yàn)中學(xué)中考一模英語試題(原卷版+解析版)
評論
0/150
提交評論