




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程名稱 計(jì)算機(jī)網(wǎng)絡(luò) 實(shí)驗(yàn)序號 實(shí)驗(yàn)五 實(shí)驗(yàn)項(xiàng)目 Ping程序的設(shè)計(jì)與實(shí)現(xiàn) 2017年 03月 25 日1 / 14實(shí)驗(yàn)報(bào)告要求1、實(shí)驗(yàn)報(bào)告封面填表說明(每份實(shí)驗(yàn)報(bào)告必須附上封面)(1)課程名稱:要求與實(shí)驗(yàn)大綱和實(shí)驗(yàn)指導(dǎo)書中的課程名稱一致。(2)實(shí)驗(yàn)序號:指該課程的第幾個實(shí)驗(yàn)。(3)實(shí)驗(yàn)項(xiàng)目:要求與實(shí)驗(yàn)大綱和實(shí)驗(yàn)指導(dǎo)書中的實(shí)驗(yàn)項(xiàng)目一致。(4)實(shí)驗(yàn)地點(diǎn):填寫完成該實(shí)驗(yàn)項(xiàng)目所在的實(shí)驗(yàn)室名稱。(5)實(shí)驗(yàn)學(xué)時:要求與實(shí)驗(yàn)大綱和實(shí)驗(yàn)指導(dǎo)書中完成該實(shí)驗(yàn)項(xiàng)目所需學(xué)時一致。(6)實(shí)驗(yàn)類型:是指演示性、操作性、驗(yàn)證性、綜合性、設(shè)計(jì)性。演示性:教師操作,學(xué)生觀察,驗(yàn)證理論、說明原理和方法。操作性:學(xué)生按要求動手拆
2、裝、調(diào)試實(shí)驗(yàn)裝置或上機(jī)操作,掌握其基本原理和方法。驗(yàn)證性:按實(shí)驗(yàn)指導(dǎo)書(教材)要求,由學(xué)生通過操作驗(yàn)證所學(xué)理論,加深對理論、知識的理解,掌握基本實(shí)驗(yàn)知識、方法、技能、數(shù)據(jù)處理等。綜合性:實(shí)驗(yàn)內(nèi)容涉及本課程的綜合知識或相關(guān)課程的知識,運(yùn)用多的知識、多種方法,按要求或自擬實(shí)驗(yàn)方案進(jìn)行實(shí)驗(yàn)。主要培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識、實(shí)驗(yàn)方法和實(shí)驗(yàn)技能,以培養(yǎng)其分析、解決問題的能力。設(shè)計(jì)性:給定實(shí)驗(yàn)?zāi)康摹⒁蠛蛯?shí)驗(yàn)條件,學(xué)生自己設(shè)計(jì)實(shí)驗(yàn)方案并加以實(shí)現(xiàn)的實(shí)驗(yàn)。學(xué)生獨(dú)立完成從查閱資料、擬定實(shí)驗(yàn)方案、實(shí)驗(yàn)方法和步驟(或系統(tǒng)分析和設(shè)計(jì))、選擇儀器設(shè)備(或自行設(shè)計(jì)缺制作)進(jìn)行實(shí)驗(yàn)并完成實(shí)驗(yàn)全過程,形成實(shí)驗(yàn)報(bào)告,培養(yǎng)學(xué)生自主
3、實(shí)驗(yàn)的能力。2、實(shí)驗(yàn)報(bào)告的格式軟件類實(shí)驗(yàn)報(bào)告格式公共課實(shí)驗(yàn)報(bào)告格式硬件類實(shí)驗(yàn)報(bào)告格式序號要求序號要求序號要求1實(shí)驗(yàn)?zāi)康募耙?實(shí)驗(yàn)?zāi)康募耙?實(shí)驗(yàn)預(yù)習(xí)實(shí)驗(yàn)?zāi)康膶?shí)驗(yàn)原理及內(nèi)容(簡明扼要,主要是實(shí)驗(yàn)接線圖)2實(shí)驗(yàn)原理與內(nèi)容2實(shí)驗(yàn)步驟所用儀器設(shè)備3實(shí)驗(yàn)軟硬件環(huán)境3操作要點(diǎn)預(yù)習(xí)思考題4實(shí)驗(yàn)過程(實(shí)驗(yàn)步驟、記錄、數(shù)據(jù)、分析)4實(shí)驗(yàn)結(jié)果2實(shí)驗(yàn)原始記錄(經(jīng)實(shí)驗(yàn)指導(dǎo)教師簽名認(rèn)可)畫出實(shí)驗(yàn)所需要的各種記錄表格5測試/調(diào)試及實(shí)驗(yàn)結(jié)果分析5實(shí)驗(yàn)問題3實(shí)驗(yàn)報(bào)告數(shù)據(jù)處理(數(shù)據(jù)表格、計(jì)算結(jié)果、誤差、結(jié)果表達(dá)、曲線圖等)6實(shí)驗(yàn)結(jié)論與體會6小結(jié)及討論結(jié)論討論3、教師批改學(xué)生實(shí)驗(yàn)報(bào)告要求(1)批改:全部批改及更正錯誤。(2)評
4、分:按百分制評分,不能評分為“優(yōu)、良、中、差”或“A、B、C”。(3)簽名及批改日期:任課教師必須在每份學(xué)生實(shí)驗(yàn)報(bào)告中簽名和寫上批改日期。(4)成績:填寫學(xué)生實(shí)驗(yàn)成績表,實(shí)驗(yàn)成績作為考試成績評定的依據(jù)。(4)評語:任課教師批改學(xué)生實(shí)驗(yàn)報(bào)告時,應(yīng)給出簡明扼要的評語。成績:教師評語指導(dǎo)教師簽名: 批閱日期:一、實(shí)驗(yàn)?zāi)康募耙?. 加深對ICMP協(xié)議的理解2. 熟悉原始套接字的使用方法3. 掌握PING程序的實(shí)現(xiàn)流程 二、實(shí)驗(yàn)原理與內(nèi)容1、 一種網(wǎng)絡(luò)診斷工具2、 發(fā)送ICMP回送請求報(bào)文3、 接收 ICMP回送應(yīng)答報(bào)文4、 IP報(bào)文格式5、 WinSock原始套接字的使用方法與API函數(shù)Winsoc
5、k原始套接字編程過程中,服務(wù)器端/客戶端的編程都按照以下步驟:初始化套接字(WSAStartup)創(chuàng)建套接字(socket或WSASocket)向服務(wù)器通信(sendto/recvfrom)關(guān)閉套接字(closesocket)結(jié)束使用套接字(WSACleanup)6、 三種WinSock地址結(jié)構(gòu) 用的Winsock地址結(jié)構(gòu)sockaddr ,針對各種通信域的套接字,存儲它們的地址信息。 專門針對Internet 通信域的Winsock地址結(jié)構(gòu)sockaddr_in 專用于存儲IP地址的結(jié)構(gòu)in_addr 三、實(shí)驗(yàn)軟硬件環(huán)境運(yùn)行Windows XP/ Windows Server 2003/Wi
6、ndows 7操作系統(tǒng)的PC一臺Visual C+6.0/ Visual Studio 2005/Visual Studio 2010開發(fā)環(huán)境 四、實(shí)驗(yàn)過程(實(shí)驗(yàn)步驟、記錄、數(shù)據(jù)、分析)1. 打開Visual Studio 2013,建立工程文件2. 了解需求,進(jìn)行需求分析:使用winsock原始套接字編寫ping程序,要求實(shí)現(xiàn)如下功能:可以指定ping的目標(biāo)主機(jī)IP。每次發(fā)送4個ICMP回送請求報(bào)文,每個請求報(bào)文的數(shù)據(jù)大小為32字節(jié),發(fā)送超時和接收超時時間設(shè)為1000ms。對于發(fā)出的每個ICMP回送請求報(bào)文,若收到應(yīng)答報(bào)文,顯示每個應(yīng)答報(bào)文的數(shù)據(jù)大小(byte)、源IP、序號、響應(yīng)時間(ms
7、);若發(fā)送超時或接收超時,顯示“Request time out.”最后,顯示用戶名和ping的統(tǒng)計(jì)信息。統(tǒng)計(jì)信息包括發(fā)出的請求報(bào)文個數(shù)、收到的應(yīng)答報(bào)文個數(shù)、丟包個數(shù)、丟包率。 3. 繪制流程框圖4. 編寫各個函數(shù)代碼塊5. 編譯,運(yùn)行實(shí)驗(yàn)代碼如下:(溫馨提醒:意要在.cpp文件的前后添加#include "stdafx.h" (是預(yù)編譯處理器把stdafx.h文件中的內(nèi)容加載到程序中來。)#include "stdafx.h"#pragma pack(4) #pragma comment( lib, "ws2_32.lib" )#i
8、nclude "winsock2.h"/#include "stdafx.h"/增加的頭文#include "stdlib.h"#include "stdio.h"#define ICMP_ECHO 8 / ICMP ECHO 請求報(bào)文類型#define ICMP_ECHOREPLY 0 / ICMP ECHO 響應(yīng)報(bào)文類型#define ICMP_MIN 8 / 最小ICMP報(bào)文大小為8 bytes (只有ICMP首部) #define ICMP_PACKET_SIZE 32 /ICMP報(bào)文數(shù)據(jù)大小#define
9、 ICMP_PACKET_NUMBER 4 /發(fā)送ICMP報(bào)文的個數(shù)#define MAX_PACKET 1024 / 最大ICMP報(bào)文數(shù)據(jù)長度 #define ICMP_TIMEOUT 1000 /ICMP超時時間#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s) #define xfree(p) HeapFree (GetProcessHeap(),0,(p) /* 定義結(jié)構(gòu)體:IP 首部*/typedef struct iphdr unsigned int h_len : 4; / 首部長度 unsigne
10、d int version : 4; / IP版本 unsigned char tos; / 服務(wù)類型unsigned short total_len; / 報(bào)文總長度 unsigned short ident; / IP報(bào)文標(biāo)識符 unsigned short frag_and_flags; / 分片標(biāo)記和片偏移 unsigned char ttl; / 生存時間unsigned char proto; / 報(bào)文數(shù)據(jù)的協(xié)議類型unsigned short checksum; / 首部檢驗(yàn)和unsigned int sourceIP; / 源IPunsigned int destIP; / 目
11、的IPIpHeader;/* 定義結(jié)構(gòu)體:ICMP 首部*/typedef struct icmphdr BYTE i_type; / ICMP報(bào)文類型BYTE i_code; / 代碼USHORT i_cksum; / 報(bào)文校驗(yàn)和USHORT i_id; / ICMP報(bào)文標(biāo)識符USHORT i_seq; / 報(bào)文序號ULONG timestamp; /時間戳,不是ICMP報(bào)文首部的標(biāo)準(zhǔn)組成部分IcmpHeader;void fill_icmp_data(char *, int); / ICMP請求報(bào)文填充函數(shù)USHORT checksum(USHORT *, int); / 校驗(yàn)和計(jì)算函數(shù)i
12、nt decode_resp(char *, int, struct sockaddr_in *); / ICMP應(yīng)答報(bào)文解析函數(shù)int main(int argc, char *argv)WSADATA wsaData; /套接字信息SOCKET sockRaw; /原始套件字char dest_ip16;/目的IP(字符串)unsigned int addr = 0; /目的IP(整型)struct sockaddr_in dest; /目的IP(sockaddr_in結(jié)構(gòu))struct sockaddr_in from; /源socket地址int fromlen = sizeof(fr
13、om);/源socket地址的長度int datasize; /報(bào)文總長度(=首部大小+數(shù)據(jù)大小)/int bwrote, bread; /實(shí)際發(fā)送和接收數(shù)據(jù)大小int timeout = ICMP_TIMEOUT; /超時時間USHORT seq_no = 0;/報(bào)文序號從0開始遞增int statistic = 0; / 成功接收報(bào)文的個數(shù)char *icmp_data; /指向發(fā)送緩沖區(qū)的指針char *recvbuf; /指向接收緩沖區(qū)的指針memset(dest_ip, '0', sizeof(dest_ip);if (argc<2) printf("
14、Please input destination host IP(請輸入目的IP):");scanf("%s", &dest_ip);elsememcpy(dest_ip, argv1, strlen(argv1);/* 初始化函數(shù) */if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)/第一處printf("WSAStartup failed: %dn", GetLastError();return -1;/* 創(chuàng)建傳輸ICMP協(xié)議數(shù)據(jù)的原始套接字 */sockRaw = WSASoc
15、ket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, WSA_FLAG_OVERLAPPED);/第二/* raw-protocol interface */第三處if (sockRaw = INVALID_SOCKET) printf("WSASocket() failed: %dn", WSAGetLastError();return -1;/* 設(shè)置套接字的接收超時選項(xiàng)(即設(shè)置SO_RCVTIMEO) */if (setsockopt(sockRaw, SOL_SOCKET, SO_RCVTIMEO, (char*)&ti
16、meout, sizeof(timeout) = SOCKET_ERROR)printf("failed to set recv timeout: %dn", WSAGetLastError();return -1;/* 設(shè)置套接字的發(fā)送超時選項(xiàng)(即設(shè)置SO_SNDTIMEO) */if (setsockopt(sockRaw, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeout, sizeof(timeout) = SOCKET_ERROR)printf("failed to set send timeout: %dn&qu
17、ot;, WSAGetLastError();return -1;/* 轉(zhuǎn)換指定的目的IP為winsocket地址結(jié)構(gòu)*/addr = inet_addr(dest_ip);/第四處inet_addr()的功能是將一個點(diǎn)分十進(jìn)制的IP轉(zhuǎn)換成一個長整數(shù)型數(shù)(u_long類型)dest.sin_addr.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_PACKET);if (
18、!icmp_data) printf("HeapAlloc failed %dn", GetLastError();return -1;/* 創(chuàng)建接收緩沖區(qū),分配內(nèi)存*/recvbuf = (char*)xmalloc(MAX_PACKET);if (!recvbuf) printf("HeapAlloc failed %dn", GetLastError();return -1;/* 填充待發(fā)送的ICMP請求報(bào)文*/memset(icmp_data, 0, MAX_PACKET);fill_icmp_data(icmp_data, datasize);
19、/* 顯示ping提示信息*/printf("nPinging %s .nn", dest_ip);/* 發(fā)送4個ICMP請求報(bào)文,并接收應(yīng)答報(bào)文*/for (int i = 0; i<ICMP_PACKET_NUMBER; i+)int bwrote = 0, bread = 0; /實(shí)際發(fā)送和接收數(shù)據(jù)大小(IcmpHeader*)icmp_data)->i_cksum = 0; /校驗(yàn)和字段置0(IcmpHeader*)icmp_data)->timestamp = GetTickCount(); /時間戳字段置為當(dāng)前系統(tǒng)時間(IcmpHeader*)
20、icmp_data)->i_seq = seq_no+; /序號字段每次遞增1(IcmpHeader*)icmp_data)->i_cksum = checksum(USHORT*)icmp_data, datasize);/計(jì)算校驗(yàn)和/* 發(fā)送ICMP請求報(bào)文*/bwrote = sendto(sockRaw, icmp_data, datasize, 0, (struct sockaddr*)&dest, sizeof(dest);/第五第六處if (bwrote = SOCKET_ERROR)if (WSAGetLastError() = WSAETIMEDOUT)
21、printf("Request timed out.n");continue;printf("sendto failed: %dn", WSAGetLastError();return -1;/* 接收ICMP應(yīng)答報(bào)文*/bread = recvfrom(sockRaw, recvbuf, MAX_PACKET, 0, (struct sockaddr*)&from, &fromlen);/第七處if (bread = SOCKET_ERROR)if (WSAGetLastError() = WSAETIMEDOUT) printf(&q
22、uot;Request timed out.n");continue;printf("recvfrom failed: %dn", WSAGetLastError();return -1;/* 如果解析成功,遞增成功接收的數(shù)目+ */if (!decode_resp(recvbuf, bread, &from)statistic+;Sleep(1000); /間隔1000ms后再發(fā)下一個請求報(bào)文/* 顯示用戶名和統(tǒng)計(jì)結(jié)果*/printf("nPing statistics collected by XXX for %s n", dest
23、_ip);printf(" Packets: Sent = %d,Received = %d, Lost = %d (%2.0f% loss)n",ICMP_PACKET_NUMBER, /發(fā)送報(bào)文個數(shù)statistic,/接收報(bào)文個數(shù)(ICMP_PACKET_NUMBER - statistic),/丟失報(bào)文個數(shù)(float)(ICMP_PACKET_NUMBER - statistic) / ICMP_PACKET_NUMBER * 100);/丟包率/* 關(guān)閉套接字 */closesocket(sockRaw);/第九處/* 注銷函數(shù) */WSACleanup();r
24、eturn 0;/* ICMP回送請求報(bào)文填充函數(shù) */void fill_icmp_data(char * icmp_data, int datasize)IcmpHeader *icmp_hdr;char *datapart;icmp_hdr = (IcmpHeader*)icmp_data;icmp_hdr->i_type = ICMP_ECHO;icmp_hdr->i_code = 0;icmp_hdr->i_id = (USHORT)GetCurrentProcessId();icmp_hdr->i_cksum = 0;icmp_hdr->i_seq =
25、 0;datapart = icmp_data + sizeof(IcmpHeader);memset(datapart, 'E', datasize - sizeof(IcmpHeader);/* ICMP回送應(yīng)答報(bào)文解析函數(shù) */int decode_resp(char *buf, int bytes, struct sockaddr_in *from)IpHeader *iphdr;IcmpHeader *icmphdr;unsigned short iphdrlen;iphdr = (IpHeader *)buf;iphdrlen = (iphdr->h_len) * 4;if (bytes < iphdrlen + ICMP_MIN) printf("Too few bytes from %sn", inet_ntoa(from->sin_addr);return -1;icmphdr = (IcmpHeader*)(buf + iphdrlen);if (icmphdr->i_type != ICMP_ECHOREPLY) printf("non-echo type %d recvdn", icmphdr-&
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 社會熱點(diǎn)事件在初中歷史教學(xué)中的應(yīng)用策略與實(shí)踐研究
- 海洋調(diào)查設(shè)備項(xiàng)目風(fēng)險(xiǎn)評估報(bào)告
- 中國集成顯卡行業(yè)市場深度分析及發(fā)展趨勢預(yù)測報(bào)告
- 2025年 滄州市人民醫(yī)院招聘考試筆試試題附答案
- 2025年中國全銅紅沖三角閥行業(yè)市場發(fā)展前景及發(fā)展趨勢與投資戰(zhàn)略研究報(bào)告
- 2022-2027年中國瓜子行業(yè)市場供需現(xiàn)狀及投資戰(zhàn)略研究報(bào)告
- 2025年中國網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)行業(yè)發(fā)展前景預(yù)測及投資戰(zhàn)略研究報(bào)告
- 2024-2030全球RJ11連接器行業(yè)調(diào)研及趨勢分析報(bào)告
- 小河口水電站環(huán)境影響評價報(bào)告書【專業(yè)版】
- 老年三輪車項(xiàng)目投資可行性研究分析報(bào)告(2024-2030版)
- 有限空間作業(yè)及應(yīng)急物資清單
- DB13(J)∕T 8060-2019 城鎮(zhèn)供熱管道及設(shè)備安裝工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 《國際商務(wù)》課程
- 壓力容器設(shè)計(jì)管理制度
- 比亞迪員工手冊54
- 國際經(jīng)濟(jì)學(xué)期末考試試題庫含答案
- 應(yīng)力波理論復(fù)習(xí)資料
- 基于PLC的音樂噴泉控制系統(tǒng)的設(shè)計(jì)-畢業(yè)設(shè)計(jì)
- 體育場地與設(shè)施
- 五年級部編版語文下學(xué)期修改病句專項(xiàng)強(qiáng)化練習(xí)題
- 民辦非企業(yè)單位清算報(bào)告
評論
0/150
提交評論