




已閱讀5頁,還剩10頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
此文檔收集于網絡,如有侵權,請聯系網站刪除網絡協議編程課程設計指導教師: 學生班級: 網絡10802 學生姓名: 學 號: 班內序號: 21 課設日期:2011/7/52011/7/12 目 錄一、課程設計目的與任務3二、設計任務及要求31、RAW模式的SOCKET編程32、具體內容3三、需求分析4四、總體設計(流程圖)5五、詳細設計與實現6六、實現結果及結果分析11七、使用說明14八、課設小結14一、課程設計目的與任務網絡協議編程課程設計是學習TCP/IP協議分析課程后的一個重要實踐環節,是對學生進行的一次較為全面的網絡協議分析應用程序設計訓練。其基本目的是:(1)培養學生理論聯系實際的設計思想,訓練綜合運用所學的基礎理論知識,結合生產實際分析和解決網絡應用中基本問題的能力,從而使基礎理論知識得到鞏固和加深。(2)訓練學生運用軟件工程的原理、方法和工具完整地設計并開發一個網絡應用系統,歷練軟件工程常規設計過程和基本方法。為將來的實際應用開發打好基礎。(3)深層次掌握TCP/IP協議的基本原理與數據格式。(4)熟悉并掌握網絡通信協議Socket編程的方法。 二、設計任務及要求1、RAW模式的SOCKET編程PING程序是面向用戶的應用程序,該程序使用ICMP的封裝機制,通過IP協議來工作為了實現直接對IP和ICMP包進行操作,實驗中使用RAW模式的SOCKET編程。熟悉SOCKET的編程,包括基本的系統調用如SOCKET、BIND等。2、具體內容1) 定義數據結構需要定義好IP數據報、ICMP包等相關的數據結構2) 程序實現在WINDOWS環境下實現PING程序3) 程序要求在窗體文本框中輸入: PING .其中為目的主機的IP地址,不要求支持域名,對是否帶有開關變量也不做要求。不帶開關變量時,要求返回4次響應。返回信息顯示在窗體上: REPLY FROM .或 REQUEST TimeOut (無法PING通的情況) (3)實驗步驟和注意事項1、 熟悉IP以及ICMP協議的工作機制2、 熟悉RAW模式的SOCKET編程3、 編寫PING的實現程序4、 編譯環境中需要包括SOCKET庫 WS2_32.lib5、 在模擬實現環境下調試并運行自己編寫的PING程序三、需求分析在帶界面的PING程序中最基本的需要是用以輸入IP的文本框,顯示reply的文本框和幾個基本按鈕。這個要事先知道在PING .后的reply要返回哪些內容,上面已經要求返回4次響應,每次相應的reply就以我們平時在doc下ping的結果為模板REPLY FROM .:Bytes=XX TTL=XXX Time=XXms.雖然要求為目的主機的IP地址,不要求支持域名但域名的轉換還是蠻簡單的固定代碼就加上去了。也添加了兩個清空的按鈕以便于用戶使用。四、總體設計(流程圖)A ping B結 束將ICMP封裝到IP數據報中并發送給B計算校驗和、獲取ip封裝ICMP接受B的回復判斷接受字節數是否為0解析收到的報文核實收到的ID號和發送的是否一致丟棄返回目地IP、字節數、TTL值、時間戳是否不一致一致五、詳細設計與實現1.用vc新建一個MFC對話框工程,從控件中拖入靜態文本右擊屬性修改id和標題,類似的再拖入其他的編輯框和按鈕,在顯示reply的編輯框的屬性中要勾選只讀,這樣既可以無法修改reply又可以節省復制粘貼的代碼。在界面大致完成的時候界面如下: 圖一:完成界面結構因為默認的是白色所以在Initlnstance()中添加SetDialogBkColor (RGB (128, 184, 223), RGB ( 0, 0 , 150 ) );使得界面的背景色變為藍色。 圖二:改變背景BOOL CPingApp:InitInstance()SetDialogBkColor (RGB (128, 184, 223), RGB ( 0, 0 , 150 ) );覺得通用的.ico圖片不是我想要的便換了一張。在此時運行得到的界面效果是: 圖三:沒有任何的功能的藍色界面效果2.接下來就是在.cpp文件中添加相應的代碼以實現老師和自己的要求。首先是定義ip和icmp 的首部,這些代碼是固定的所以直接復制粘貼了。typedef struct ip_hdr /定義IP首部 unsigned char h_verlen; /4位首部長度,4位IP版本號 unsigned char tos; /8位服務類型TOS unsigned short total_len; /16位總長度(字節) unsigned short ident; /16位標識 unsigned short frag_and_flags;/3位標志位 unsigned char ttl; /8位生存時間 TTL unsigned char proto; /8位協議 (TCP, UDP 或其他) unsigned short checksum; /16位IP首部校驗和 unsigned int sourceIP; /32位源IP地址 unsigned int destIP; /32位目的IP地址 IP_HEADER; typedef struct icmp_hdr BYTE i_type; / ICMP報文類型 BYTE i_code; / ICMP代碼 USHORT i_cksum; / 校驗和 USHORT i_id; / 標志符 USHORT i_seq; / 序號 ULONG timestamp; / 時間戳 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); /如果初始化不成功則報錯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; /超時毫秒/設置發送超時和接收超時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; /為網絡地址類型,一般為AF_INETaddr_in.sin_addr.S_un.S_addr = inet_addr(ip); /IP/設置數據報頭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); /發送一個icmpHeaderrect = sendto(socki, (char*)&icmpHeader, sizeof(icmpHeader), 0, (sockaddr*)&addr_in, sizeof(addr_in); int addr_from_len; addr_from_len = sizeof(addr_from); /接收的數據報為IP頭+ICMP頭rect = recvfrom(socki, recvbuf, sizeof(recvbuf), 0, (sockaddr*)&addr_from, &addr_from_len);/rect為接收的字節數 if(rect0)/正確就調用DecodeHeader輸出DecodeHeader(recvbuf, rect); else CString reply=REQUEST TimeOut!;SetDlgItemText(IDC_REPLY,reply);closesocket(socki); WSACleanup(); 用于初始化各個全局變量,為全局變量賦初始值;初始化,加載庫。定義一個Cstring reply用以輸出。例如當超時時便輸出REQUEST TimeOut!CString reply=REQUEST TimeOut!;SetDlgItemText(IDC_REPLY,reply);域名轉換:hostent *hp=gethostbyname(ip);/域名轉換成IPif(hp!=NULL)ip=inet_ntoa(*(struct in_addr*)hp- h_addr_list0); 4.在CDlg中添加函數USHORT CPingDlg:checksum(USHORT *buffer, int size) 圖四:添加cheksum()函數checksum()函數用于計算校驗和。計算過程是首先把數據報頭中的校驗和字段設置為0,然后對首部中每個16bit 進行二字段進制反碼求和(整個首部看成是由一串16bit的字組成),結果存在校驗和字段中。其中buffer 用于存放ICMP數據,size表示ICMP報文大小。USHORT CPingDlg:checksum(USHORT *buffer, int size)unsigned long cksum=0; while(size 1) cksum+=*buffer+; size -=sizeof(USHORT); if(size ) /若size為奇數 cksum += *(UCHAR*)buffer; cksum = (cksum 16) + (cksum & 0xffff); cksum += (cksum 16); return (USHORT)(cksum); 5.添加函數void CPingDlg:DecodeHeader(char *buf, int len)解讀報頭函數在初始化中if(rect0)DecodeHeader(recvbuf, rect); 即正確時就調用DecodeHeader輸出 if (icmpHeader-i_id != (USHORT)GetCurrentProcessId() /核實收到的ID號和發送的是否一致 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.添加自己加上去的小函數重置:因為輸入ip/域名的id設為了IDC_IP所以GetDlgItem(IDC_IP)-SetWindowText();便可以實現重置ip/域名六、實現結果及結果分析在運行后產生.exe文件雙擊此文件便可運行。1.用本機測試: Ping TTL即為生存值,每經過一個路由器值便減少1,因為為本機所以沒有經過任何一個路由器,故為最大值128,Time為時間戳,在本機變為0.2.在斷網時無法訪問百度故拋出異常 Ping 3.聯網時 Ping 要訪問百度用的是域名,先經過轉換為ip。因為訪問百度必然是要經過路由器所以TTL值小于128,時間戳也會不一樣。4.重置 當不想ping這個ip或者域名時單擊這個“重置”按鈕。七、使用說明直接在“ip/域名:”后面的編輯框中輸入ip或者域名,點擊“ping”按鈕即可在下面只讀的藍色編輯框中顯示回復的信息。如果不想ping某一個ip或者域名可以點擊“重置”鍵可再次輸入ip或者域名。因為清空鍵(clear)的設置問題貌似是實現了清空但在沒有關閉的情況下上一次的顯示結果在下一次還是會再次顯示。八、課設小結 TCP/IP這門課
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 關于書包小學作文300字(8篇)
- 2025年小學教師資格考試《綜合素質》邏輯思維訓練題目及答案試卷
- 青春的色彩想象作文(14篇)
- 腫瘤科中醫護理講課件
- 春游的記憶事件記敘文展現成長印記13篇
- 2025臘八節話題作文7篇
- 第一期考核職業病危害(職業衛生)檢測人員復習題.(題目+答案)
- 議論文:談談我對環保的看法作文9篇
- 六年級想象作文我的書本里長出了媽媽700字(12篇)
- 金融科技OO全面戰略合作協議
- 機械設備安裝程序、安裝分類、固定方式及安裝新技術應用
- 大樓維修改造工程投標方案(完整技術標)
- 取力器的設計畢業設計
- 二年級下學期語文無紙化測試題例
- 《建筑施工安全檢查標準》JGJ
- 國際貿易實務案例分析題(附答案)2
- 初二地理會考答題卡模板
- 軌道交通信號基礎智慧樹知到答案章節測試2023年同濟大學
- 婦產科學智慧樹知到答案章節測試2023年浙江大學
- 農村公路建設標準
- 2015-2022年深圳職業技術學院高職單招語文/數學/英語筆試參考題庫含答案解析
評論
0/150
提交評論