版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課程名稱 計(jì)算機(jī)網(wǎng)絡(luò) 實(shí)驗(yàn)序號(hào) 實(shí)驗(yàn)五 實(shí)驗(yàn)項(xiàng)目 Ping程序的設(shè)計(jì)與實(shí)現(xiàn) 2017年 03月 25 日實(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)序號(hào):指該課程的第幾個(gè)實(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í):要求與實(shí)驗(yàn)大綱和實(shí)驗(yàn)指導(dǎo)書中完成該實(shí)驗(yàn)項(xiàng)目所需學(xué)時(shí)一致。(6)實(shí)驗(yàn)類型:是指演示性、操作性、驗(yàn)證性、綜合性、設(shè)計(jì)性。演示性:教師操作,學(xué)生觀察,驗(yàn)證理論、說明原理和方法。操作性:學(xué)生按要求動(dòng)手拆裝、調(diào)試實(shí)驗(yàn)
2、裝置或上機(jī)操作,掌握其基本原理和方法。驗(yàn)證性:按實(shí)驗(yàn)指導(dǎo)書(教材)要求,由學(xué)生通過操作驗(yàn)證所學(xué)理論,加深對(duì)理論、知識(shí)的理解,掌握基本實(shí)驗(yàn)知識(shí)、方法、技能、數(shù)據(jù)處理等。綜合性:實(shí)驗(yàn)內(nèi)容涉及本課程的綜合知識(shí)或相關(guān)課程的知識(shí),運(yùn)用多的知識(shí)、多種方法,按要求或自擬實(shí)驗(yàn)方案進(jìn)行實(shí)驗(yàn)。主要培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)、實(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é)生自主實(shí)驗(yàn)的能力。
3、2、實(shí)驗(yàn)報(bào)告的格式軟件類實(shí)驗(yàn)報(bào)告格式公共課實(shí)驗(yàn)報(bào)告格式硬件類實(shí)驗(yàn)報(bào)告格式序號(hào)要求序號(hào)要求序號(hà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)容(簡(jiǎn)明扼要,主要是實(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測(cè)試/調(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é)論與體會(huì)6小結(jié)及討論結(jié)論討論3、教師批改學(xué)生實(shí)驗(yàn)報(bào)告要求(1)批改:全部批改及更正錯(cuò)誤。(2)評(píng)分:按百分制
4、評(píng)分,不能評(píng)分為“優(yōu)、良、中、差”或“A、B、C”。(3)簽名及批改日期:任課教師必須在每份學(xué)生實(shí)驗(yàn)報(bào)告中簽名和寫上批改日期。(4)成績:填寫學(xué)生實(shí)驗(yàn)成績表,實(shí)驗(yàn)成績作為考試成績?cè)u(píng)定的依據(jù)。(4)評(píng)語:任課教師批改學(xué)生實(shí)驗(yàn)報(bào)告時(shí),應(yīng)給出簡(jiǎn)明扼要的評(píng)語。成績:教師評(píng)語指導(dǎo)教師簽名: 批閱日期:一、實(shí)驗(yàn)?zāi)康募耙?. 加深對(duì)ICMP協(xié)議的理解2. 熟悉原始套接字的使用方法3. 掌握PING程序的實(shí)現(xiàn)流程 二、實(shí)驗(yàn)原理與內(nèi)容1、 一種網(wǎng)絡(luò)診斷工具2、 發(fā)送ICMP回送請(qǐng)求報(bào)文3、 接收 ICMP回送應(yīng)答報(bào)文4、 IP報(bào)文格式5、 WinSock原始套接字的使用方法與API函數(shù)Winsock原始套接字
5、編程過程中,服務(wù)器端/客戶端的編程都按照以下步驟:初始化套接字(WSAStartup)創(chuàng)建套接字(socket或WSASocket)向服務(wù)器通信(sendto/recvfrom)關(guān)閉套接字(closesocket)結(jié)束使用套接字(WSACleanup)6、 三種WinSock地址結(jié)構(gòu) 用的Winsock地址結(jié)構(gòu)sockaddr ,針對(duì)各種通信域的套接字,存儲(chǔ)它們的地址信息。 專門針對(duì)Internet 通信域的Winsock地址結(jié)構(gòu)sockaddr_in 專用于存儲(chǔ)IP地址的結(jié)構(gòu)in_addr 三、實(shí)驗(yàn)軟硬件環(huán)境運(yùn)行Windows XP/ Windows Server 2003/Windows
6、7操作系統(tǒng)的PC一臺(tái)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個(gè)ICMP回送請(qǐng)求報(bào)文,每個(gè)請(qǐng)求報(bào)文的數(shù)據(jù)大小為32字節(jié),發(fā)送超時(shí)和接收超時(shí)時(shí)間設(shè)為1000ms。對(duì)于發(fā)出的每個(gè)ICMP回送請(qǐng)求報(bào)文,若收到應(yīng)答報(bào)文,顯示每個(gè)應(yīng)答報(bào)文的數(shù)據(jù)大?。╞yte)、源IP、序號(hào)、響應(yīng)時(shí)間(ms);若發(fā)送超
7、時(shí)或接收超時(shí),顯示“Request time out.”最后,顯示用戶名和ping的統(tǒng)計(jì)信息。統(tǒng)計(jì)信息包括發(fā)出的請(qǐng)求報(bào)文個(gè)數(shù)、收到的應(yīng)答報(bào)文個(gè)數(shù)、丟包個(gè)數(shù)、丟包率。 3. 繪制流程框圖4. 編寫各個(gè)函數(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 )#include winsock2.h/#include stdafx.h/增加的頭文#
8、include stdlib.h#include stdio.h#define ICMP_ECHO 8 / ICMP ECHO 請(qǐng)求報(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 ICMP_PACKET_NUMBER 4 /發(fā)送ICMP報(bào)文的個(gè)數(shù)#define MAX_PACKET 1024 / 最大ICMP報(bào)文數(shù)據(jù)長度 #define ICMP_TIME
9、OUT 1000 /ICMP超時(shí)時(shí)間#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; / 首部長度 unsigned int version : 4; / IP版本 unsigned char tos; / 服務(wù)類型unsigned short total_len; / 報(bào)文總長度 unsig
10、ned short ident; / IP報(bào)文標(biāo)識(shí)符 unsigned short frag_and_flags; / 分片標(biāo)記和片偏移 unsigned char ttl; / 生存時(shí)間unsigned char proto; / 報(bào)文數(shù)據(jù)的協(xié)議類型unsigned short checksum; / 首部檢驗(yàn)和unsigned int sourceIP; / 源IPunsigned int destIP; / 目的IPIpHeader;/* 定義結(jié)構(gòu)體:ICMP 首部*/typedef struct icmphdr BYTE i_type; / ICMP報(bào)文類型BYTE i_code; /
11、 代碼USHORT i_cksum; / 報(bào)文校驗(yàn)和USHORT i_id; / ICMP報(bào)文標(biāo)識(shí)符USHORT i_seq; / 報(bào)文序號(hào)ULONG timestamp; /時(shí)間戳,不是ICMP報(bào)文首部的標(biāo)準(zhǔn)組成部分IcmpHeader;void fill_icmp_data(char *, int); / ICMP請(qǐng)求報(bào)文填充函數(shù)USHORT checksum(USHORT *, int); / 校驗(yàn)和計(jì)算函數(shù)int decode_resp(char *, int, struct sockaddr_in *); / ICMP應(yīng)答報(bào)文解析函數(shù)int main(int argc, char *
12、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(from);/源socket地址的長度int datasize; /報(bào)文總長度(=首部大小+數(shù)據(jù)大?。?int bwrote, bread; /實(shí)際發(fā)送和接收數(shù)據(jù)大小int timeo
13、ut = ICMP_TIMEOUT; /超時(shí)時(shí)間USHORT seq_no = 0;/報(bào)文序號(hào)從0開始遞增int statistic = 0; / 成功接收?qǐng)?bào)文的個(gè)數(shù)char *icmp_data; /指向發(fā)送緩沖區(qū)的指針char *recvbuf; /指向接收緩沖區(qū)的指針memset(dest_ip, 0, sizeof(dest_ip);if (argc2) printf(Please input destination host IP(請(qǐng)輸入目的IP):);scanf(%s, &dest_ip);elsememcpy(dest_ip, argv1, strlen(argv1);/* 初始
14、化函數(shù) */if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)/第一處printf(WSAStartup failed: %dn, GetLastError();return -1;/* 創(chuàng)建傳輸ICMP協(xié)議數(shù)據(jù)的原始套接字 */sockRaw = WSASocket(AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0, WSA_FLAG_OVERLAPPED);/第二/* raw-protocol interface */第三處if (sockRaw = INVALID_SOCKET) printf(WSASocket(
15、) failed: %dn, WSAGetLastError();return -1;/* 設(shè)置套接字的接收超時(shí)選項(xiàng)(即設(shè)置SO_RCVTIMEO) */if (setsockopt(sockRaw, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout) = SOCKET_ERROR)printf(failed to set recv timeout: %dn, WSAGetLastError();return -1;/* 設(shè)置套接字的發(fā)送超時(shí)選項(xiàng)(即設(shè)置SO_SNDTIMEO) */if (setsockopt(sockRaw,
16、SOL_SOCKET, SO_SNDTIMEO, (char*)&timeout, sizeof(timeout) = SOCKET_ERROR)printf(failed to set send timeout: %dn, WSAGetLastError();return -1;/* 轉(zhuǎn)換指定的目的IP為winsocket地址結(jié)構(gòu)*/addr = inet_addr(dest_ip);/第四處inet_addr()的功能是將一個(gè)點(diǎn)分十進(jìn)制的IP轉(zhuǎn)換成一個(gè)長整數(shù)型數(shù)(u_long類型)dest.sin_addr.s_addr = addr;dest.sin_family = AF_INET;/
17、* 創(chuàng)建發(fā)送緩沖區(qū),分配內(nèi)存*/datasize = ICMP_PACKET_SIZE + sizeof(IcmpHeader);icmp_data = (char*)xmalloc(MAX_PACKET);if (!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;/* 填
18、充待發(fā)送的ICMP請(qǐng)求報(bào)文*/memset(icmp_data, 0, MAX_PACKET);fill_icmp_data(icmp_data, datasize);/* 顯示ping提示信息*/printf(nPinging %s .nn, dest_ip);/* 發(fā)送4個(gè)ICMP請(qǐng)求報(bào)文,并接收應(yīng)答報(bào)文*/for (int i = 0; ii_cksum = 0; /校驗(yàn)和字段置0(IcmpHeader*)icmp_data)-timestamp = GetTickCount(); /時(shí)間戳字段置為當(dāng)前系統(tǒng)時(shí)間(IcmpHeader*)icmp_data)-i_seq = seq_no+
19、; /序號(hào)字段每次遞增1(IcmpHeader*)icmp_data)-i_cksum = checksum(USHORT*)icmp_data, datasize);/計(jì)算校驗(yàn)和/* 發(fā)送ICMP請(qǐng)求報(bào)文*/bwrote = sendto(sockRaw, icmp_data, datasize, 0, (struct sockaddr*)&dest, sizeof(dest);/第五第六處if (bwrote = SOCKET_ERROR)if (WSAGetLastError() = WSAETIMEDOUT) printf(Request timed out.n);continue;p
20、rintf(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(Request timed out.n);continue;printf(recvfrom failed: %dn, WSAGetLastErr
21、or();return -1;/* 如果解析成功,遞增成功接收的數(shù)目+ */if (!decode_resp(recvbuf, bread, &from)statistic+;Sleep(1000); /間隔1000ms后再發(fā)下一個(gè)請(qǐng)求報(bào)文/* 顯示用戶名和統(tǒng)計(jì)結(jié)果*/printf(nPing statistics collected by XXX for %s n, dest_ip);printf( Packets: Sent = %d,Received = %d, Lost = %d (%2.0f% loss)n,ICMP_PACKET_NUMBER, /發(fā)送報(bào)文個(gè)數(shù)statistic,/
22、接收?qǐng)?bào)文個(gè)數(shù)(ICMP_PACKET_NUMBER - statistic),/丟失報(bào)文個(gè)數(shù)(float)(ICMP_PACKET_NUMBER - statistic) / ICMP_PACKET_NUMBER * 100);/丟包率/* 關(guān)閉套接字 */closesocket(sockRaw);/第九處/* 注銷函數(shù) */WSACleanup();return 0;/* ICMP回送請(qǐng)求報(bào)文填充函數(shù) */void fill_icmp_data(char * icmp_data, int datasize)IcmpHeader *icmp_hdr;char *datapart;icmp_hd
23、r = (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 = 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 sin_addr);return -1;icmphdr = (IcmpHeader*)(buf + iphdrlen);if (icmphdr-i_type != ICM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版定制門銷售合同示范文本3篇
- 2025年度男方離婚協(xié)議書模板定制與婚姻法律風(fēng)險(xiǎn)評(píng)估合同
- 2025年度門窗行業(yè)風(fēng)險(xiǎn)管理與保險(xiǎn)合同-@-2
- 二零二五年度航空機(jī)票代理客戶關(guān)系管理體系合同3篇
- 二零二五年度大型農(nóng)機(jī)跨區(qū)域作業(yè)租賃合同2篇
- 2025年度個(gè)人地暖系統(tǒng)環(huán)保材料采購合同
- 2025年度特色苗木新品種引進(jìn)及推廣合同3篇
- 2025年度養(yǎng)老服務(wù)機(jī)構(gòu)服務(wù)合同老年人權(quán)益保障及服務(wù)質(zhì)量評(píng)價(jià)4篇
- 2025年度智慧城市運(yùn)營維護(hù)合同4篇
- 2025年度網(wǎng)絡(luò)安全產(chǎn)品供應(yīng)與維護(hù)合同4篇
- 2024-2030年中國海泡石產(chǎn)業(yè)運(yùn)行形勢(shì)及投資規(guī)模研究報(bào)告
- 動(dòng)物醫(yī)學(xué)類專業(yè)生涯發(fā)展展示
- 2024年同等學(xué)力申碩英語考試真題
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 非遺文化走進(jìn)數(shù)字展廳+大數(shù)據(jù)與互聯(lián)網(wǎng)系創(chuàng)業(yè)計(jì)劃書
- 2024山西省文化旅游投資控股集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 科普知識(shí)進(jìn)社區(qū)活動(dòng)總結(jié)與反思
- 加油站廉潔培訓(xùn)課件
- 現(xiàn)金日記賬模板(帶公式)
- 消化內(nèi)科??票O(jiān)測(cè)指標(biāo)匯總分析
- 深圳市物業(yè)專項(xiàng)維修資金管理系統(tǒng)操作手冊(cè)(電子票據(jù))
評(píng)論
0/150
提交評(píng)論