版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、'3買驗報魯課程名稱 計算機網(wǎng)絡(luò)實驗序號實驗五實驗項目Ping程序的設(shè)計與實現(xiàn)2017年03月25日實驗報告要求1、實驗報告封面填表說明(每份實驗報告必須附上封面)(1)課程名稱:要求與實驗大綱和實驗指導書中的課程名稱一致。(2)實驗序號:指該課程的第幾個實驗。(3)實驗項目:要求與實驗大綱和實驗指導書中的實驗項目一致。(4)實驗地點:填寫完成該實驗項目所在的實驗室名稱。(5)實驗學時:要求與實驗大綱和實驗指導書中完成該實驗項目所需學時一致。(6)實驗類型:是指演示性、操作性、驗證性、綜合性、設(shè)計性。演示性:教師操作,學生觀察,驗證理論、說明原理和方法。操作性:學生按要求動手拆裝、調(diào)試
2、實驗裝置或上機操作,掌握其基本原理和方法。驗證性:按實驗指導書(教材)要求,由學生通過操作驗證所學理論,加深對理論、知識的理 解,掌握基本實驗知識、方法、技能、數(shù)據(jù)處理等。綜合性:實驗內(nèi)容涉及本課程的綜合知識或相關(guān)課程的知識,運用多的知識、多種方法,按要 求或自擬實驗方案進行實驗。主要培養(yǎng)學生綜合運用所學知識、實驗方法和實驗技能,以培養(yǎng)其分 析、解決問題的能力。設(shè)計性:給定實驗目的、要求和實驗條件,學生自己設(shè)計實驗方案并加以實現(xiàn)的實驗。學生獨 立完成從查閱資料、擬定實驗方案、實驗方法和步驟(或系統(tǒng)分析和設(shè)計)、選擇儀器設(shè)備(或自行設(shè)計缺制作)進行實驗并完成實驗全過程,形成實驗報告,培養(yǎng)學生自主
3、實驗的能力。2、實驗報告的格式軟件類實驗報告格式公共課實驗報告格式硬件類實驗報告格式序號要求序號要求序號要求1實驗目的及要求1實驗目的及要求1實驗預習實驗目的實驗原理及內(nèi)容(簡明扼要, 主要是實驗接線圖)2實驗原理與內(nèi)容2實驗步驟所用儀器設(shè)備3實驗軟硬件環(huán)境3操作要點預習思考題4實驗過程(實驗步驟、 記錄、數(shù)據(jù)、分析)4實驗結(jié)果2實驗原始記 錄(經(jīng)實驗指 導教師簽名 認可)畫出實驗所需要的各種記錄表格5測試/調(diào)試及實驗結(jié)果分析5實驗問題3實驗報告數(shù)據(jù)處理(數(shù)據(jù)表格、計算結(jié)果、誤差、 結(jié)果表達、曲線圖等)6實驗結(jié)論與體會6小結(jié)及討論結(jié)論討論3、教師批改學生實驗報告要求(1)批改:全部批改及更正錯
4、誤。(2) 評分:按百分制評分,不能評分為“優(yōu)、良、中、差”或“A B C。(3)簽名及批改日期:任課教師必須在每份學生實驗報告中簽名和寫上批改日期。(4)成績:填寫學生實驗成績表,實驗成績作為考試成績評定的依據(jù)。(4)評語:任課教師批改學生實驗報告時,應給出簡明扼要的評語。成績:教 師 評 語指導教師簽名:批閱日期:一、實驗目的及要求1. 加深對ICMP協(xié)議的理解2. 熟悉原始套接字的使用方法3. 掌握PING程序的實現(xiàn)流程二、實驗原理與內(nèi)容1、一種網(wǎng)絡(luò)診斷工具2、發(fā)送ICMP回送請求報文3、接收ICMP回送應答報文卜 11111 *類型:呂或0代碼二0檢驗和1標識符序號由請求報文發(fā)送;由回
5、答報文重復4、IP報文格式據(jù)協(xié)調(diào)數(shù)據(jù)緩沖區(qū)close$ocket()調(diào)用卅i n:soG4位版本叢位服務類型I百位總長度(字節(jié)數(shù))16位標識3位標志13位片倔移$位生存時間$位協(xié)議類型“位首部檢驗和3Z位源LP地址32位目的1哋址選項(:如果有M S A S t 衛(wèi) r t yWinsock, d I I應用程序1資源sockaddr ,針對各種通信域的套接字, 存儲它們的地址W i riAiCk應用 .程序1開始W i nGck應用 .程序研始/socketO 或 WSASockeg5、Win Sock原始套接字的使用方法與API函數(shù)Wnsock原始套接字編程過程中,服務器端/客戶端的編程都
6、按照以下步驟: 初始化套接字(WSAStartup)創(chuàng)建套接字(socket或 WSASocket)向服務器通信(sendto/recvfrom) 關(guān)閉套接字(closesocket) 結(jié)束使用套接字(WSACleanup)sendtof) rgcvfem f) J6、三種Win Sock地址結(jié)構(gòu)用的Win sock地址結(jié)構(gòu)recvfrom () sendtDh ,檢查 Winsackin 為應用程庫分配soul實現(xiàn) 壬序分配資舞4位首部 長度叮 socketO 或1 WS倉SX噸內(nèi)存實現(xiàn)引用!8U 2和2 0枯實現(xiàn)1 BanupTJJl其他Ieanup7r)l漕理工作:將套猿字中的數(shù)據(jù) 發(fā)建
7、完畢斷畀流式査接亨的 連耀釋放所分配的資源應用程序2資源清理工作,將套接字中的數(shù)撇 發(fā)送完畢廝開澆式査接宇的 連接釋牌所分配的資薄數(shù)據(jù)煖沖區(qū)査接字對照表其他ciosesocket()信息。 專門針對In ternet通信域的 Win sock地址結(jié)構(gòu)sockaddr_in 專用于存儲IP地址的結(jié)構(gòu)in_addr三、實驗軟硬件環(huán)境運行 Windows XP/ Windows Server 2003/Windows 7 操作系統(tǒng)的 PC臺 Visual C+6.0/ Visual Studio 2005/Visual Studio 2010開發(fā)環(huán)境四、實驗過程(實驗步驟、記錄、數(shù)據(jù)、分析)1. 打
8、開Visual Studio 2013 ,建立工程文件2. 了解需求,進行需求分析:使用win sock原始套接字編寫ping程序,要求實現(xiàn)如下功能:可以指定ping的目標主機IP。每次發(fā)送4個ICMP回送請求報文,每個請求報文的數(shù)據(jù)大小為32字節(jié),發(fā)送超時和接收超時時間設(shè)為1000ms對于發(fā)出的每個ICMP回送請求報文,若收到應答報文,顯示每個應答報文的數(shù)據(jù) 大小(byte )、源IP、序號、響應時間(ms);若發(fā)送超時或接收超時,顯示“Request time out. ”最后,顯示用戶名和ping的統(tǒng)計信息。統(tǒng)計信息包括發(fā)出的請求報文個數(shù)、收到 的應答報文個數(shù)、丟包個數(shù)、丟包率。3. 繪
9、制流程框圖輸出信息V結(jié)束:4. 編寫各個函數(shù)代碼塊5. 編譯,運行(是預編譯處理實驗代碼如下:(溫馨提醒:意要在.cpp文件的前后添加#inelude "stdafx.h"器把stdafx.h文件中的內(nèi)容加載到程序中來。)#i nclude "stdafx.h"#pragma pack(4)#pragma commen( lib , "ws2 32.lib")#i nclude "wi nsock2.h"#i nclude "stdafx.h"/增加的頭文#i nclude "stdl
10、ib.h"#i nclude "stdio.h" #define ICMP_ECHO /ICMP ECHO 請求報文類型#define ICMP_ECHOREPLY/ ICMP ECHO 響應報文類型#define ICMP_MIN8 / 最小 ICMP報文大小為 8 bytes (只有 ICMP首部)#define ICMP_PACKET_SIZE2 /ICMP 報文數(shù)據(jù)大小#define ICMP_PACKET_NUME4ER 發(fā)送 ICMP報文的個數(shù)#define MAX_PACKET1024/ 最大 ICMP報文數(shù)據(jù)長度#define ICMP_TIMEO
11、UTOOO /ICMP 超時時間#define xmalloc (s) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEM(SRY#define xfree (p) HeapFree (GetProcessHeap(),0,(p) |unsigned short total_len;/ 報文總長度un sig ned short ide nt;/ IP 報文標識符unsigned short frag_and_flags; / 分片標記和片偏移 unsigned char ttl; / 生存時間/*定義結(jié)構(gòu)體:ICMP首部*/typedef structicmp
12、hdr BYTEi_type; / ICMP 報文類型BYTEi_code; / 代碼USHORiTcksum; /報文校驗和WSADATAsaData; / 套接字信息SOCKETockRaw; /原始套件字 char dest_ip16; / 目的 IP (字符串) unsigned int addr = 0;/ 目的 IP (整型)structsockaddr_in dest;/ 目的 IP (sockaddr_in 結(jié)構(gòu))structsockaddr_in from; / 源 socket 地址int fromlen = sizeof (from); / 源 socket 地址的長度
13、int datasize; /報文總長度(=首部大小+數(shù)據(jù)大小) / int bwrote, bread; /實際發(fā)送和接收數(shù)據(jù)大小int timeout =ICMP_TIMEOUT 超時時間USHORTeq _no = 0;/報文序號從0開始遞增int statistic = 0;/成功接收報文的個數(shù)char *icmp_data;/指向發(fā)送緩沖區(qū)的指針char *recvbuf; /指向接收緩沖區(qū)的指針memset(dest_ip, '0' , sizeof (dest_ip);if ( argc <2) printf( "Please in put des
14、t in ation host IP(請輸入目的 IP):");scanf( "%s", &dest_ip);elsememcpy(dest_ip, argv 1, strlen( argv 1);/*初始化函數(shù)*/*創(chuàng)建傳輸ICMP協(xié)議數(shù)據(jù)的原始套接字*/sockRaw = WSASocke(tAF_INET SOCK_RAWIPPROTO_ICM PNULL 0, WSA_FLAG_OVERLAPPED第二 /* raw-protocol in terface */第三處if (sockRaw = INVALID_SOCKTprintf( "
15、WSASocket() failed: %dn", WSAGetLastError();return -1;/*設(shè)置套接字的接收超時選項(即設(shè)置SO_RCVTIMEO) */if (setsockopt(sockRaw, SOL_SOCKETSO_RCVTIMEO char *)&timeout, sizeof (timeout)= SOCKET_ERRORprintf( "failed to set recv timeout: %dn", WSAGetLastError();return -1;/*設(shè)置套接字的發(fā)送超時選項(即設(shè)置SO SNDTIMEO)
16、 */if (setsockopt(sockRaw, SOL_SOCKETSO_SNDTIMEO char *)&timeout,sizeof (timeout)=SOCKET_ERRORprintf( "failed to set send timeout: %dn", WSAGetLastError();return -1;/* 轉(zhuǎn)換指定的目的IP為win socket地址結(jié)構(gòu)*/addr = inet_addr(dest_ip);/第四處inet_addr() 的功能是將一個點分十進制的IP轉(zhuǎn)換成一個長整數(shù)型數(shù)(u long類型)dest.s in _addr
17、.s_addr = addr;dest.sin_family = AF_INET/*創(chuàng)建發(fā)送緩沖區(qū),分配內(nèi)存*/datasize =ICMP PACKET SIZE sizeof (IcmpHeader);icmp data = ( char *) xmalloc (MAX PACKETif (!icmp_data) printf( "HeapAlloc failed %dn", GetLastError();return -1;/*創(chuàng)建接收緩沖區(qū),分配內(nèi)存*/recvbuf = ( char*) xmalloc (MAX PACKETif (!recvbuf) print
18、f( "HeapAlloc failed %dn", GetLastError();return -1;/*填充待發(fā)送的ICMPi青求報文*/ memset(icmp data, 0,MAX PACK£Tfill icmp data(icmp data, datasize);/*顯示ping提示信息*/printf( "nPinging %s .nn", dest ip);/*發(fā)送4個ICMP請求報文,并接收應答報文*/for ( int i = 0; i<ICMP_PACKET_NUM;BER|int bwrote = 0, bread
19、 = 0;/實際發(fā)送和接收數(shù)據(jù)大小(lcmpHeader*)icmp_data)->i_cksum = 0;/ 校驗和字段置 0(IcmpHeader*)icmp_data)->timestamp = GetTickCount();/ 時間戳字段置為當前系統(tǒng)時間(IcmpHeader*)icmp data)->i seq = seq no+;/ 序號字段每次遞增 1(IcmpHeader*)icmp_data)->i_cksum = checksum( USHOF*Jicmp_data, datasize); / 計算校驗和/*發(fā)送ICMP請求報文*/bwrote =
20、sendto(sockRaw, icmp data, datasize, 0, (struct sockaddr*)&dest, sizeof (dest); / 第五第六處if (bwrote = SOCKET_ERRORif (WSAGetLastError() =WSAETIMEDOU Tprintf( "Request timed out. n");continue ;pri ntf( "se ndto failed: %dn", WSAGetLastError();return -1; /*接收ICMP應答報文*/bread = rec
21、vfrom(sockRaw, recvbuf, MAX_PACKET ( structsockaddr *) &from, & fromle n);/第七處if (bread = SOCKET_ERRQRif (WSAGetLastError() = WSAETIMEDOU Tprintf( "Request timed out. n");continue ;pri ntf( "recvfrom failed: %dn", WSAGetLastError();return -1; |/*如果解析成功,遞增成功接收的數(shù)目+ */if (!d
22、ecode resp(recvbuf, bread, &from)statistic+;Sleep(1000);/間隔1000ms后再發(fā)下一個請求報文/*顯示用戶名和統(tǒng)計結(jié)果*/printf( "nPi ng statistics collected by XXX for %s n", dest_ip);printf( " Packets: Sent = %d,Received = %d, Lost = %d (%2.0f% loss)n",ICMP_PACKET_NUM,BER 發(fā)送報文個數(shù) statistic, /接收報文個數(shù)(ICMP PA
23、CKET NUMBEtatistic),/ 丟失報文個數(shù)(float )( ICMP_PACKET_NUMB Etatistic) /ICMP_PACKET_NUMBER0); / 丟包率/*關(guān)閉套接字*/closesocket(sockRaw); / 第九處/*注銷函數(shù)*/WSAClea nup();return 0;/* ICMP回送請求報文填充函數(shù)*/void fill_icmp_data( char * icmp_data , int datasize )IcmpHeader *icmp_hdr;char *datapart;icmp_hdr = ( IcmpHeader*) icmp
24、_data ;icmp hdr->i type =ICMP ECHOicmp_hdr->i_code = 0;icmp_hdr->i_id = (USHORGetCurre ntProcessld();icmp_hdr->i_cksum = 0;icmp_hdr->i_seq = 0;datapart = icmp_data + sizeof (IcmpHeader); memset(datapart, 'E' , datasize - sizeof (IcmpHeader);/* ICMP回送應答報文解析函數(shù)*/nt decode_resp( c
25、har * buf, int bytes , struct sockaddr_in * from)IpHeader *iphdr;IcmpHeader *icmphdr;unsigned short iphdrlen;iphdr = ( IpHeader *) buf;iphdrle n = (iphdr->h_le n) * 4;if ( bytes < iphdrlen + ICMP_MIN printf( "Too few bytes from %sn", i net_n toa(from ->s in _addr);return -1;icmphdr = ( IcmpHeader*)( buf + iphdrlen);if (icmphdr->i type !=ICMP ECHOREF)LYprintf( "non-echo type %d recvdn" , icmphdr->i_type);return -1;if (ic
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高跟鞋銷售心得總結(jié)
- 電子電器銷售工作總結(jié)
- 2024全新酒店集團資產(chǎn)托管合作協(xié)議范本3篇
- 火箭升空課程設(shè)計
- 江蘇省高三語文試卷分類匯編文學類文本閱讀專題
- 幼兒美術(shù)小課程設(shè)計
- 新課標2022科學解讀心得范文(7篇)
- 2024年一件代發(fā)運動器材代理合同3篇
- 接受單位捐款感謝信(8篇)
- 師范生個人求職信范文
- 小升初小學數(shù)學幾何圖形應用題專題練習《巧算周長》
- 旅游學概論最新復習題庫與答案
- 土木工程建筑中混凝土裂縫的施工處理技術(shù)畢業(yè)論文
- 水電站調(diào)速器系統(tǒng)最權(quán)威講義課件
- 膠合板生產(chǎn)工藝
- TROXLER3440核子密度儀
- 課程設(shè)計--高位自卸汽車的設(shè)計
- 初中數(shù)學八年級上《整式的乘法及因式分解》知識點及經(jīng)典題型
- 天罡儀表CR40系列數(shù)據(jù)集中器用戶手冊
- 威尼斯狂歡節(jié)長笛鋼琴伴奏譜PierreAgricolaGeninC
- 古傳五禽戲內(nèi)功法詳解(圖)
評論
0/150
提交評論