版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、課程名稱 計算機網(wǎng)絡 實驗序號 實驗五 實驗項目 Ping程序的設計與實現(xiàn) 2017年 03月 25 日實驗報告要求1、實驗報告封面填表說明(每份實驗報告必須附上封面)(1)課程名稱:要求與實驗大綱和實驗指導書中的課程名稱一致。(2)實驗序號:指該課程的第幾個實驗。(3)實驗項目:要求與實驗大綱和實驗指導書中的實驗項目一致。(4)實驗地點:填寫完成該實驗項目所在的實驗室名稱。(5)實驗學時:要求與實驗大綱和實驗指導書中完成該實驗項目所需學時一致。(6)實驗類型:是指演示性、操作性、驗證性、綜合性、設計性。演示性:教師操作,學生觀察,驗證理論、說明原理和方法。操作性:學生按要求動手拆裝、調(diào)試實驗
2、裝置或上機操作,掌握其基本原理和方法。驗證性:按實驗指導書(教材)要求,由學生通過操作驗證所學理論,加深對理論、知識的理解,掌握基本實驗知識、方法、技能、數(shù)據(jù)處理等。綜合性:實驗內(nèi)容涉及本課程的綜合知識或相關課程的知識,運用多的知識、多種方法,按要求或自擬實驗方案進行實驗。主要培養(yǎng)學生綜合運用所學知識、實驗方法和實驗技能,以培養(yǎng)其分析、解決問題的能力。設計性:給定實驗目的、要求和實驗條件,學生自己設計實驗方案并加以實現(xiàn)的實驗。學生獨立完成從查閱資料、擬定實驗方案、實驗方法和步驟(或系統(tǒng)分析和設計)、選擇儀器設備(或自行設計缺制作)進行實驗并完成實驗全過程,形成實驗報告,培養(yǎng)學生自主實驗的能力。
3、2、實驗報告的格式軟件類實驗報告格式公共課實驗報告格式硬件類實驗報告格式序號要求序號要求序號要求1實驗目的及要求1實驗目的及要求1實驗預習實驗目的實驗原理及內(nèi)容(簡明扼要,主要是實驗接線圖)2實驗原理與內(nèi)容2實驗步驟所用儀器設備3實驗軟硬件環(huán)境3操作要點預習思考題4實驗過程(實驗步驟、記錄、數(shù)據(jù)、分析)4實驗結果2實驗原始記錄(經(jīng)實驗指導教師簽名認可)畫出實驗所需要的各種記錄表格5測試/調(diào)試及實驗結果分析5實驗問題3實驗報告數(shù)據(jù)處理(數(shù)據(jù)表格、計算結果、誤差、結果表達、曲線圖等)6實驗結論與體會6小結及討論結論討論3、教師批改學生實驗報告要求(1)批改:全部批改及更正錯誤。(2)評分:按百分制
4、評分,不能評分為“優(yōu)、良、中、差”或“A、B、C”。(3)簽名及批改日期:任課教師必須在每份學生實驗報告中簽名和寫上批改日期。(4)成績:填寫學生實驗成績表,實驗成績作為考試成績評定的依據(jù)。(4)評語:任課教師批改學生實驗報告時,應給出簡明扼要的評語。成績:教師評語指導教師簽名: 批閱日期:一、實驗目的及要求1. 加深對ICMP協(xié)議的理解2. 熟悉原始套接字的使用方法3. 掌握PING程序的實現(xiàn)流程 二、實驗原理與內(nèi)容1、 一種網(wǎng)絡診斷工具2、 發(fā)送ICMP回送請求報文3、 接收 ICMP回送應答報文4、 IP報文格式5、 WinSock原始套接字的使用方法與API函數(shù)Winsock原始套接字
5、編程過程中,服務器端/客戶端的編程都按照以下步驟:初始化套接字(WSAStartup)創(chuàng)建套接字(socket或WSASocket)向服務器通信(sendto/recvfrom)關閉套接字(closesocket)結束使用套接字(WSACleanup)6、 三種WinSock地址結構 用的Winsock地址結構sockaddr ,針對各種通信域的套接字,存儲它們的地址信息。 專門針對Internet 通信域的Winsock地址結構sockaddr_in 專用于存儲IP地址的結構in_addr 三、實驗軟硬件環(huán)境運行Windows XP/ Windows Server 2003/Windows
6、7操作系統(tǒng)的PC一臺Visual C+6.0/ Visual Studio 2005/Visual Studio 2010開發(fā)環(huán)境 四、實驗過程(實驗步驟、記錄、數(shù)據(jù)、分析)1. 打開Visual Studio 2013,建立工程文件2. 了解需求,進行需求分析:使用winsock原始套接字編寫ping程序,要求實現(xiàn)如下功能:可以指定ping的目標主機IP。每次發(fā)送4個ICMP回送請求報文,每個請求報文的數(shù)據(jù)大小為32字節(jié),發(fā)送超時和接收超時時間設為1000ms。對于發(fā)出的每個ICMP回送請求報文,若收到應答報文,顯示每個應答報文的數(shù)據(jù)大?。╞yte)、源IP、序號、響應時間(ms);若發(fā)送超
7、時或接收超時,顯示“Request time out.”最后,顯示用戶名和ping的統(tǒng)計信息。統(tǒng)計信息包括發(fā)出的請求報文個數(shù)、收到的應答報文個數(shù)、丟包個數(shù)、丟包率。 3. 繪制流程框圖4. 編寫各個函數(shù)代碼塊5. 編譯,運行實驗代碼如下:(溫馨提醒:意要在.cpp文件的前后添加#include stdafx.h (是預編譯處理器把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 請求報文類型#define ICMP_ECHOREPLY 0 / ICMP ECHO 響應報文類型#define ICMP_MIN 8 / 最小ICMP報文大小為8 bytes (只有ICMP首部) #define ICMP_PACKET_SIZE 32 /ICMP報文數(shù)據(jù)大小#define ICMP_PACKET_NUMBER 4 /發(fā)送ICMP報文的個數(shù)#define MAX_PACKET 1024 / 最大ICMP報文數(shù)據(jù)長度 #define ICMP_TIME
9、OUT 1000 /ICMP超時時間#define xmalloc(s) HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(s) #define xfree(p) HeapFree (GetProcessHeap(),0,(p) /* 定義結構體:IP 首部*/typedef struct iphdr unsigned int h_len : 4; / 首部長度 unsigned int version : 4; / IP版本 unsigned char tos; / 服務類型unsigned short total_len; / 報文總長度 unsig
10、ned short ident; / IP報文標識符 unsigned short frag_and_flags; / 分片標記和片偏移 unsigned char ttl; / 生存時間unsigned char proto; / 報文數(shù)據(jù)的協(xié)議類型unsigned short checksum; / 首部檢驗和unsigned int sourceIP; / 源IPunsigned int destIP; / 目的IPIpHeader;/* 定義結構體:ICMP 首部*/typedef struct icmphdr BYTE i_type; / ICMP報文類型BYTE i_code; /
11、 代碼USHORT i_cksum; / 報文校驗和USHORT i_id; / ICMP報文標識符USHORT i_seq; / 報文序號ULONG timestamp; /時間戳,不是ICMP報文首部的標準組成部分IcmpHeader;void fill_icmp_data(char *, int); / ICMP請求報文填充函數(shù)USHORT checksum(USHORT *, int); / 校驗和計算函數(shù)int decode_resp(char *, int, struct sockaddr_in *); / ICMP應答報文解析函數(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結構)struct sockaddr_in from; /源socket地址int fromlen = sizeof(from);/源socket地址的長度int datasize; /報文總長度(=首部大小+數(shù)據(jù)大小)/int bwrote, bread; /實際發(fā)送和接收數(shù)據(jù)大小int timeo
13、ut = ICMP_TIMEOUT; /超時時間USHORT seq_no = 0;/報文序號從0開始遞增int statistic = 0; / 成功接收報文的個數(shù)char *icmp_data; /指向發(fā)送緩沖區(qū)的指針char *recvbuf; /指向接收緩沖區(qū)的指針memset(dest_ip, 0, sizeof(dest_ip);if (argc2) printf(Please input destination host IP(請輸入目的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;/* 設置套接字的接收超時選項(即設置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;/* 設置套接字的發(fā)送超時選項(即設置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;/* 轉換指定的目的IP為winsocket地址結構*/addr = inet_addr(dest_ip);/第四處inet_addr()的功能是將一個點分十進制的IP轉換成一個長整數(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請求報文*/memset(icmp_data, 0, MAX_PACKET);fill_icmp_data(icmp_data, datasize);/* 顯示ping提示信息*/printf(nPinging %s .nn, dest_ip);/* 發(fā)送4個ICMP請求報文,并接收應答報文*/for (int i = 0; ii_cksum = 0; /校驗和字段置0(IcmpHeader*)icmp_data)-timestamp = GetTickCount(); /時間戳字段置為當前系統(tǒng)時間(IcmpHeader*)icmp_data)-i_seq = seq_no+
19、; /序號字段每次遞增1(IcmpHeader*)icmp_data)-i_cksum = checksum(USHORT*)icmp_data, datasize);/計算校驗和/* 發(fā)送ICMP請求報文*/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應答報文*/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ā)下一個請求報文/* 顯示用戶名和統(tǒng)計結果*/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ā)送報文個數(shù)statistic,/
22、接收報文個數(shù)(ICMP_PACKET_NUMBER - statistic),/丟失報文個數(shù)(float)(ICMP_PACKET_NUMBER - statistic) / ICMP_PACKET_NUMBER * 100);/丟包率/* 關閉套接字 */closesocket(sockRaw);/第九處/* 注銷函數(shù) */WSACleanup();return 0;/* ICMP回送請求報文填充函數(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回送應答報文解析函數(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度井蓋專利技術許可與轉讓合同3篇
- 2025年度新型建材鋼管租賃服務合同
- 二零二五年度家電產(chǎn)品銷售合同協(xié)議范本3篇
- 2025年度二手房屋買賣居間服務合同范本全新升級版
- 2025年度預制構件裝配式建筑項目風險評估與保險合同
- 二零二五年度跑步賽事場地設施租賃合同4篇
- 二零二五年度古建筑修繕泥工班組專業(yè)施工合同4篇
- 2025版民爆物品裝卸作業(yè)應急救援預案合同3篇
- 2025年墻體改梁與裝配式建筑技術應用合同3篇
- 2025版二零二五年度商鋪租賃合同租賃物保險條款3篇
- 礦物加工工程基礎知識單選題100道及答案解析
- 2024年同等學力申碩英語考試真題
- 世說新語原文及翻譯-副本
- 消除“艾梅乙”醫(yī)療歧視-從我做起
- 非遺文化走進數(shù)字展廳+大數(shù)據(jù)與互聯(lián)網(wǎng)系創(chuàng)業(yè)計劃書
- 2024山西省文化旅游投資控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 科普知識進社區(qū)活動總結與反思
- 加油站廉潔培訓課件
- 現(xiàn)金日記賬模板(帶公式)
- 消化內(nèi)科??票O(jiān)測指標匯總分析
- 深圳市物業(yè)專項維修資金管理系統(tǒng)操作手冊(電子票據(jù))
評論
0/150
提交評論