




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上天津師范大學(xué)Tianjin University of Education網(wǎng)絡(luò)課程設(shè)計(jì)所在學(xué)院: 信息技術(shù)工程學(xué)院 專(zhuān) 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 號(hào): 學(xué)生姓名: 指導(dǎo)教師: 二一三年六月專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)信息技術(shù)工程學(xué)院網(wǎng)絡(luò)課程設(shè)計(jì)使用ICMP發(fā)現(xiàn)局域網(wǎng)內(nèi)活動(dòng)主機(jī)學(xué)生姓名:肖磊指導(dǎo)教師:黃彥 副教授 20 13 年 6月摘 要本程序使用原始套接字生成ICMP報(bào)文來(lái)進(jìn)行活動(dòng)主機(jī)的探查。這個(gè)程序使用的是回送請(qǐng)求與應(yīng)答消息。程序的大致思想是把ICMP的數(shù)據(jù)包類(lèi)型設(shè)置為回送請(qǐng)求,將它發(fā)送給網(wǎng)絡(luò)上的一個(gè)IP地址,如果這個(gè)IP地址已經(jīng)被占用的話,那幺使用位于這個(gè)IP地址的主機(jī)上
2、的TCP/IP軟件就能夠接收到這個(gè)ICMP回送請(qǐng)求,從而返回一個(gè)ICMP回送響應(yīng)(類(lèi)型號(hào)為0)信息。信息封裝在一個(gè)IP包中,我們需要解析該IP包,從中找到ICMP數(shù)據(jù)信息。相反,如果這個(gè)IP地址沒(méi)有人使用,那幺發(fā)送的ICMP回送請(qǐng)求在設(shè)定的延時(shí)內(nèi)就不可能得到響應(yīng)。在初始化原始套接字之后,本程序就要開(kāi)始在一個(gè)IP網(wǎng)段內(nèi)尋找活動(dòng)主機(jī)。因?yàn)橐獙ふ业闹鳈C(jī)可能很多,為節(jié)省時(shí)間可以采用多線程編程。 關(guān)鍵詞: ICMP協(xié)議,Visual c+ 6.0目 錄引 言IP協(xié)議的優(yōu)點(diǎn)是簡(jiǎn)潔,但缺少差錯(cuò)控制和查詢(xún)機(jī)制,而網(wǎng)際控制報(bào)文協(xié)議(ICMP)具有補(bǔ)充IP功能的作用。在網(wǎng)絡(luò)管理中,常常要確定當(dāng)前網(wǎng)絡(luò)中處于活動(dòng)狀態(tài)
3、的主機(jī),這時(shí)可以通過(guò)使用ICMP的回送和回送響應(yīng)消息來(lái)完成這項(xiàng)工作。本課程設(shè)計(jì)的目的就是編制程序,利用ICMP數(shù)據(jù)包,發(fā)現(xiàn)指定網(wǎng)段中的活動(dòng)主機(jī)。通過(guò)課程設(shè)計(jì),更加熟悉ICMP報(bào)文的結(jié)構(gòu),對(duì)ICMP協(xié)議有更好的理解和認(rèn)識(shí)。1 課程設(shè)計(jì)相關(guān)技術(shù)1.1 ICMP報(bào)文格式及類(lèi)型編制程序前首先要對(duì)ICMP報(bào)文的格式有一定的了解,ICMP報(bào)文是在IP數(shù)據(jù)報(bào)內(nèi)部傳輸?shù)?,其結(jié)構(gòu)如圖10-1所示。 IP數(shù)據(jù)報(bào) IP首部 ICMP報(bào)文 圖10-1 ICMP封裝在IP內(nèi)部0 7 8 15 16 31(位)類(lèi)型字段代碼字段校驗(yàn)和字段(不同類(lèi)型和代碼有不同內(nèi)容)圖10-2 ICMP報(bào)文ICMP報(bào)文的格式如圖10-2所示
4、。所有報(bào)文的前4個(gè)字節(jié)都是一樣的,但是其它字節(jié)則互不相同。其中類(lèi)型字段可以有15個(gè)不同的值,以描述特定類(lèi)型的ICMP報(bào)文,某些ICMP報(bào)文還使用代碼字段的值來(lái)進(jìn)一步描述不用的條件。按驗(yàn)和字段為2字節(jié),校驗(yàn)的范圍是整個(gè)ICMP報(bào)文。檢驗(yàn)和是必須的,其計(jì)算方法與IP協(xié)議頭部校驗(yàn)和的計(jì)算方法一樣。 各種類(lèi)型的ICMP報(bào)文如圖10-3所示(ICMP報(bào)文類(lèi)型),不同類(lèi)型由報(bào)文中的類(lèi)型字段和代碼字段來(lái)共同決定。類(lèi) 型 代 碼 描 述 0 0 回送響應(yīng)(PING應(yīng)答)3 目的不可達(dá)0 網(wǎng)絡(luò)不可達(dá)1 主機(jī)不可達(dá)2 協(xié)議不可達(dá)3 端口不可達(dá)4 需要進(jìn)行分片但設(shè)置了禁止分片比特5 源主機(jī)選擇路由失敗6 無(wú)法識(shí)別目
5、的網(wǎng)絡(luò)7 無(wú)法識(shí)別目的主機(jī)8 源主機(jī)被隔離9 目的網(wǎng)絡(luò)被禁止10 目的主機(jī)被禁止11 由于服務(wù)類(lèi)型(TOS),網(wǎng)絡(luò)不可達(dá)12 由于服務(wù)類(lèi)型(TOS),主機(jī)不可達(dá)13 由于過(guò)濾,通信被強(qiáng)行禁止14 主機(jī)越權(quán)15 優(yōu)先權(quán)終止生效 4 0 源端被關(guān)閉(基本流控制)5 重定向0 對(duì)網(wǎng)絡(luò)重定向1 對(duì)主機(jī)重定向2 對(duì)服務(wù)類(lèi)型和網(wǎng)絡(luò)重定向3 對(duì)服務(wù)類(lèi)型和主機(jī)重定向 8 0 回送請(qǐng)求(PING請(qǐng)求)9 0 路由器通告10 0 路由器請(qǐng)求11 超時(shí)0 傳輸期間生存期減為01 數(shù)據(jù)報(bào)組裝期間生存期減為012 參數(shù)問(wèn)題0 各種IP頭部錯(cuò)誤1 缺少必須的選項(xiàng)13 0 時(shí)間戳請(qǐng)求14 0 時(shí)間戳應(yīng)答15 0 信息請(qǐng)求(
6、已作廢)16 0 信息應(yīng)答(已作廢)17 0 地址掩碼請(qǐng)求18 0 地址掩碼應(yīng)答10-3 ICMP報(bào)文類(lèi)型本課程設(shè)計(jì)的目的是發(fā)現(xiàn)網(wǎng)絡(luò)中的活動(dòng)主機(jī),就是使用ICMP的回送和回送響應(yīng)消息發(fā)現(xiàn)網(wǎng)絡(luò)中的活動(dòng)主機(jī),即Ping消息的請(qǐng)求和應(yīng)答。那幺,發(fā)送的ICMP的數(shù)據(jù)包類(lèi)型設(shè)置為回送請(qǐng)求(類(lèi)型號(hào)為8)。1.2實(shí)驗(yàn)平臺(tái)介紹Visual C+ 6.0,簡(jiǎn)稱(chēng)VC或者VC6.0,是推出的一款C+,將“高級(jí)語(yǔ)言”翻譯為“(低級(jí)語(yǔ)言)”的程序。Visual C+是一個(gè)功能強(qiáng)大的可視化。自1993年Microsoft公司推出Visual C+1.0后,隨著其新版本的不斷問(wèn)世,Visual C+已成為專(zhuān)業(yè)進(jìn)行開(kāi)發(fā)的首選
7、工具。Visual C+6.0由許多組件組成,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類(lèi)向?qū)lass Wizard等開(kāi)發(fā)工具。 這些組件通過(guò)一個(gè)名為Developer Studio的組件集成為和諧的開(kāi)發(fā)環(huán)境。2 課程設(shè)計(jì)過(guò)程2.1 使用原始套接字為了實(shí)現(xiàn)發(fā)送/監(jiān)聽(tīng)I(yíng)CMP報(bào)文,必須使用原始套接字,創(chuàng)建原始套接字的代碼如下: socket sockRaw; sockRaw = WSAocket (AF_INET, sock_Raw, IPPROTO_ICMP, NULL, 0, WSA_FLAG_OVERLAPPED); 在WSASocket函數(shù)中,我們使用IPPROTO_ICMP表
8、示接收ICMP數(shù)據(jù)包,為了使用發(fā)送超時(shí)設(shè)置(設(shè)置SO_RCVTIMEO或SO_SNDTIMEO),必須將標(biāo)志位置為WSA_FLAG_OVERLAPPED。然后調(diào)用setsockopt函數(shù)設(shè)置讀取延遲。 Int timeout=1000;setsockopt(sockRaw,SQL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout);setsockopt(sockRaw,SQL_socket,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout); 在setsockopt函數(shù)中,sockRaw是之前
9、創(chuàng)建的原始套接字,設(shè)置SQL_SOCKET表明使用基本套接字處理ICMP報(bào)文。設(shè)置SO_RCVTIMEO表示使用接收超時(shí)設(shè)置,SO_SNDTIMEO表示使用發(fā)送超時(shí)設(shè)置,在這里,超時(shí)時(shí)間均設(shè)置為1000ms。2.2 定義IP頭部和ICMP頭部的數(shù)據(jù)結(jié)構(gòu) 由于socket發(fā)送/捕獲的是IP包,因此要分別定義IP頭部的數(shù)據(jù)結(jié)構(gòu)ICMP頭部數(shù)據(jù)結(jié)構(gòu)。 /IP報(bào)頭的數(shù)據(jù)結(jié)構(gòu) typedef struct iphdrunsigned int headlen:4; /IP頭長(zhǎng)度unsigned int version:4; /IP版本號(hào)unsigned char tos; /服務(wù)類(lèi)型unsigned sh
10、ort totallen; /IP包總長(zhǎng)度 unsigned short id; /ID號(hào)unsigned short flag; /標(biāo)記unsigned char ttl; /生存時(shí)間unsigned char prot; /協(xié)議(UDP TCP)unsigned short checksum; /校驗(yàn)和unsigned int sourceIP; /源IPunsigned int destIP; /目的IPIpHeader;/ICMP頭部的數(shù)據(jù)結(jié)構(gòu)typedef struct icmphdr BYTE type; /ICMP類(lèi)型碼,回送請(qǐng)求的類(lèi)型碼為8 BYTE code; /子類(lèi)型碼,保
11、存與特定ICMP報(bào)文類(lèi)型相關(guān)細(xì)節(jié)信息 USHORT checksum; /校驗(yàn)和 USHORT id; /ICMP報(bào)文ID號(hào)(一般用進(jìn)程號(hào)作ID) USHORT seq; /ICMP數(shù)據(jù)報(bào)的序列號(hào)IcmpHeader;2.3 填充并發(fā)送回送請(qǐng)求類(lèi)型的ICMP報(bào)文為了使收到數(shù)據(jù)包的目的主機(jī)發(fā)送響應(yīng),我們需要向目的主機(jī)發(fā)送回送請(qǐng)求類(lèi)型的ICMP報(bào)文。從圖10-3中可知,回送請(qǐng)求的類(lèi)型號(hào)為8。因此ICMP報(bào)文的填充代碼如下:#define ICNP_ECHO 8 /請(qǐng)求回送#define DEF_PACKET_SIZE 32 /缺省數(shù)據(jù)報(bào)長(zhǎng)度#define MAX_PACKET 1024 /最大數(shù)據(jù)
12、塊長(zhǎng)度char icmp_dataMAX_PACKET; /ICMP數(shù)據(jù)報(bào)最大可能的長(zhǎng)度memset(icmp_data,0,MAX_PACKET); /將數(shù)據(jù)報(bào)清空初始化int datasize=DEF_PACKET_SIZE; /ICMP數(shù)據(jù)報(bào)報(bào)文體的缺省長(zhǎng)度datasize+=sizeof(IcmpHeader); /再加上ICMP頭部的長(zhǎng)度IcmpHeader*icmp_hdr:Char *datapart;icmp_hdr = (IcmpHeader*)icmp_data;icmp_hdr->type = ICMP_ECHO; /設(shè)置類(lèi)型icmp_hdr->id = (U
13、SHORT)GetCurrentThreadId(); /設(shè)置其ID號(hào)為當(dāng)前線程號(hào)Datapart = icmp_data + sizeof(IcmpHeader); /計(jì)算出數(shù)據(jù)報(bào)的數(shù)據(jù)部分Memset(datapart,A,datasize-sizeof(IcmpHeader); /填入數(shù)據(jù)(IcmpHeader*)icmp_data)->seq= 0; /序列號(hào)為0(IcmpHeader*)icmp_data)->checksum = 0; /先將校驗(yàn)和置0(IcmpHeader*)icmp_data)->checksum=checksum(USHORT*)icmp_d
14、ata,datasize);checksum為校驗(yàn)和的函數(shù),設(shè)校驗(yàn)和初值為0 ,然后對(duì)數(shù)據(jù)每16為求異或,結(jié)果取反,便得校驗(yàn)和。其代碼如下: USHORT checksum(USHORT *buffer, int size) /計(jì)算校驗(yàn)和 unsigned long cksum = 0; while(size>1) cksum+=*buffer+; size -=sizeof(USHORT);if(size) cksum +=*(UCHAR*)buffer; cksum = (cksum >> 16)+(cksum & 0xffff);cksum +=(cksum &
15、gt;> 16);return(USHORT)(-cksum); 填充ICMP報(bào)文之后,應(yīng)在ICMP報(bào)文之前加上IP報(bào)頭并發(fā)送出去??烧{(diào)用下面的代碼發(fā)送數(shù)據(jù)包。注意,這里的DEST是填入目的主機(jī)IP地址的一個(gè)sockaddr_in數(shù)據(jù)結(jié)構(gòu),IPSTRING是目的主機(jī)的IP地址字符串。 struct sockaddr_in dest; dest.sin_family = AF_INET; dest.sin_addr.s_addr = inet_addr(IP_STRING); /填入搜索的IP地址 sendto(sockRaw,icmp_data,datasize,0,(sockaddr*
16、)&dest,sizeof(dest);2.4程序流程圖開(kāi) 始將Start_IP添入到dest中起始IP地址Start_IP結(jié)束IP地址End_IP建立并初始化目的主機(jī)的Sockaddr_in數(shù)據(jù)結(jié)構(gòu)dest構(gòu)造原始套接字,并初始化Start_IPEnd_IP? N Y Y線程數(shù)目太多?等待一定時(shí)間 N創(chuàng)建一個(gè)線程并執(zhí)行Start_IP+ Y 還有線程在執(zhí)行?等待一定時(shí)間 N結(jié) 束 圖1 主程序流程圖開(kāi) 始填充ICMP數(shù)據(jù)報(bào)發(fā)送數(shù)據(jù)報(bào)接收數(shù)報(bào)去掉IP報(bào)頭,獲取ICMP信息數(shù)據(jù)包太短? Y N不是回送響應(yīng)? Y NID不符合? Y N輸出數(shù)據(jù)報(bào)中的IP地址 結(jié) 束圖2 子程序流程圖結(jié)論通
17、過(guò)此次課程設(shè)計(jì),我加深了對(duì)ICMP協(xié)議的理解,鞏固了課堂知識(shí)。由于網(wǎng)絡(luò)協(xié)議比較抽象、難學(xué),自己學(xué)得也不夠深入,加上還要把所學(xué)知識(shí)運(yùn)用到實(shí)踐中來(lái),所以一開(kāi)始時(shí)感覺(jué)比較困難,而且在調(diào)試過(guò)程中難免要出現(xiàn)一些如變量沒(méi)有定義、缺少頭文件、大小寫(xiě)錯(cuò)誤以及其它問(wèn)題,通過(guò)查閱文獻(xiàn)資料、向同學(xué)請(qǐng)教以及認(rèn)真地思考與分析,逐一對(duì)錯(cuò)誤進(jìn)行了調(diào)試,才使得程序能正常運(yùn)行,大體上符合了設(shè)計(jì)的目的和要求。在程序的調(diào)試過(guò)程中,出現(xiàn)問(wèn)題是正常的,關(guān)鍵是如何去發(fā)現(xiàn)問(wèn)題的根源,然后去解決它。為了能夠快速地確定錯(cuò)誤的原因,盡快的排除程序錯(cuò)誤,通常把程序錯(cuò)誤劃分為三種類(lèi)型:語(yǔ)法錯(cuò)誤、運(yùn)行錯(cuò)誤和邏輯錯(cuò)誤。在設(shè)計(jì)過(guò)程中,我們可以先找出問(wèn)題,
18、看是屬于哪一類(lèi)錯(cuò)誤,然后再將問(wèn)題一一解決,這樣既解決了疑難問(wèn)題又節(jié)省了不少時(shí)間。參考文獻(xiàn)1 安淑芝,黃彥 .計(jì)算機(jī)網(wǎng)絡(luò) M . 北京:中國(guó)鐵道出版社 .20112 吳功宜, 胡曉英, 張仁, 何云, 王寧編著. 計(jì)算機(jī)網(wǎng)絡(luò)課程設(shè)計(jì). 北京:機(jī)械工業(yè)出版社, 2010.83 吳功宜著. 計(jì)算機(jī)網(wǎng)絡(luò). 北京:清華大學(xué)出版社, 20044 陳堅(jiān), 陳偉. Visual C+網(wǎng)絡(luò)高級(jí)編程M. 北京: 人民郵電出版社,20015 郭國(guó)強(qiáng). 計(jì)算機(jī)網(wǎng)絡(luò)與Internet教程. 北京: 清華出版社,2006.116 楊豐瑞, 楊豐任. 實(shí)用教程最新計(jì)算機(jī)網(wǎng)絡(luò). 北京: 中國(guó)鐵道出版社,2001.7致謝在本課程設(shè)計(jì)論文即將完成之際,我想對(duì)所有曾經(jīng)給過(guò)我?guī)椭椭С值耐瑢W(xué)老師表示衷心的感謝。感謝我的老師對(duì)我課程設(shè)計(jì)的指導(dǎo),書(shū)到用時(shí)方恨少,在這篇論文的寫(xiě)作過(guò)程中,我深感自己的水平還非常的欠缺。生命不息,學(xué)習(xí)不止,人生就是一個(gè)不斷學(xué)習(xí)和完善的過(guò)程,敢問(wèn)路在何方?路在腳下
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 商場(chǎng)酒類(lèi)活動(dòng)方案
- 國(guó)旗慶?;顒?dòng)策劃方案
- 團(tuán)史打卡活動(dòng)策劃方案
- 品牌發(fā)布會(huì)儀式活動(dòng)方案
- 商場(chǎng)演藝活動(dòng)方案
- 品牌體恤活動(dòng)方案
- 商貿(mào)企業(yè)活動(dòng)方案
- 團(tuán)員義賣(mài)活動(dòng)方案
- 團(tuán)建品牌評(píng)比活動(dòng)方案
- 喇叭配送充值活動(dòng)方案
- 高中復(fù)讀協(xié)議書(shū)
- 2025年四川省自貢市中考物理試卷及答案
- 2025年度衛(wèi)生招聘考試(財(cái)務(wù))新版真題卷(附詳細(xì)解析)
- 2025年6月14日萍鄉(xiāng)市事業(yè)單位面試真題及答案解析
- 2025年環(huán)境工程考試試卷及答案
- 2024年深圳市中考生物試卷真題(含答案解析)
- 溝通與演講2023學(xué)習(xí)通超星課后章節(jié)答案期末考試題庫(kù)2023年
- 中考數(shù)學(xué)復(fù)習(xí)經(jīng)驗(yàn)交流PPT課件
- 內(nèi)部控制專(zhuān)項(xiàng)審計(jì)實(shí)施方案
- DSP課設(shè)——正弦波發(fā)生器
- 從《國(guó)際博物館》看世界博物館發(fā)展解析
評(píng)論
0/150
提交評(píng)論