版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計(jì)()報(bào)告( 2011 / 2012 學(xué)年 第 二 學(xué)期)題目: 活動主機(jī)的檢測 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 學(xué) 生 姓 名 班 級 學(xué) 號 指 導(dǎo) 教 師 指 導(dǎo) 單 位 計(jì)算機(jī)學(xué)院 計(jì)算機(jī)系統(tǒng)與網(wǎng)絡(luò)教學(xué)中心日 期 2012.06.112012.06.22指導(dǎo)教師成績評定表學(xué)生姓名班級學(xué)號專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)評分內(nèi)容評分標(biāo)準(zhǔn)優(yōu)秀良好中等差平時(shí)成績認(rèn)真對待課程設(shè)計(jì),遵守實(shí)驗(yàn)室規(guī)定,上機(jī)不遲到早退,不做和設(shè)計(jì)無關(guān)的事設(shè)計(jì)成果設(shè)計(jì)的科學(xué)、合理性功能豐富、符合題目要求 界面友好、外觀漂亮、大方程序功能執(zhí)行的正確性程序算法執(zhí)行的效能設(shè)計(jì)報(bào)告設(shè)計(jì)報(bào)告正確合理、反映系統(tǒng)設(shè)計(jì)流程文檔內(nèi)容詳實(shí)程度文檔格式
2、規(guī)范、排版美觀驗(yàn)收答辯簡練、準(zhǔn)確闡述設(shè)計(jì)內(nèi)容,能準(zhǔn)確有條理回答各種問題,系統(tǒng)演示順利。評分等級指導(dǎo)教師簡短評語指導(dǎo)教師簽名日期2012.06.23備注評分等級有五種:優(yōu)秀、良好、中等、及格、不及格12 / 14文檔可自由編輯打印題目一:活動主機(jī)的檢測一、 課題內(nèi)容和要求1. 設(shè)計(jì)內(nèi)容 : 根據(jù)協(xié)議規(guī)定的ICMP數(shù)據(jù)包的標(biāo)準(zhǔn)格式,編寫程序向指定網(wǎng)段中的目的主機(jī)發(fā)送ICMP數(shù)據(jù)包,并對目的主機(jī)返回的數(shù)據(jù)包進(jìn)行解析,以發(fā)現(xiàn)那些處于活動狀態(tài)的主機(jī)。2. 設(shè)計(jì)要求(1)將目的主機(jī)的狀態(tài)顯示在屏
3、幕上,具體格式: 開始主機(jī)掃描 活動主機(jī):xx.xx.xx.xx 活動主機(jī):xx.xx.xx.xx (2)要求有良好的編程規(guī)范和注釋,編程所使用的操作系統(tǒng)、語言和編譯環(huán)境不限,但是需在課程設(shè)計(jì)報(bào)告文檔中予以說明。二、需求分析2.1 使用原始套接字,實(shí)現(xiàn)發(fā)送/監(jiān)聽ICMP報(bào)文2.2 由于socket發(fā)送/捕獲的是IP包,因此要分別定義IP頭部的數(shù)據(jù)結(jié)構(gòu)和ICMP頭部的數(shù)據(jù)結(jié)構(gòu)。IP頭部的數(shù)據(jù)結(jié)構(gòu)和ICMP頭部的數(shù)據(jù)結(jié)構(gòu)在概要設(shè)計(jì)中已有分析。2.3填充并發(fā)送請求類型的ICMP報(bào)文, 填充ICMP報(bào)文后,應(yīng)在ICMP報(bào)文之前加上IP報(bào)頭并發(fā)送出去。2.4解析數(shù)據(jù)包:如果所ping的目的主機(jī)存在,那么
4、它會發(fā)出一個(gè)回送應(yīng)答包。這是一個(gè)IP包,受到后解析此數(shù)據(jù)包并獲得其中的ICMP信息。根據(jù)IP報(bào)頭信息中的IP報(bào)頭長度字段,就可以得到ICMP報(bào)文的真實(shí)地址。ICMP數(shù)據(jù)包中的IP地址就是活動主機(jī)的IP。三、概要設(shè)計(jì) 3.1 設(shè)計(jì)原理 本程序使用的原始套接字生成ICMP請求/應(yīng)答報(bào)文來進(jìn)行活動主機(jī)的探查。這個(gè)程序使用的是回送請求和應(yīng)答消息。程序的大致思想是把ICMP的數(shù)據(jù)報(bào)類型設(shè)置為回送請求,將它發(fā)送給網(wǎng)絡(luò)上的一個(gè)IP地址,如果這個(gè)IP地址已經(jīng)被占用的話,那么使用位于這個(gè)IP地址的主機(jī)上的TCP/IP軟件就能接受到這個(gè)ICMP回送請求,從而返回一個(gè)ICMP回送請求(類型號為0)信息。信息封裝在一
5、個(gè)IP包中,我們需要解析該IP包,從中找到ICMP數(shù)據(jù)信息,相反,如果這個(gè)IP地址沒有人使用,那么發(fā)送的ICMP回送請求在設(shè)定的延時(shí)內(nèi)就不可能得到響應(yīng)。本設(shè)計(jì)的主體思想是使用ICMPECHO數(shù)據(jù)包來探測指定網(wǎng)段內(nèi)的活動主機(jī)。具體方法是:通過簡單的發(fā)送一個(gè)ICMPECHO(Type 8)數(shù)據(jù)包到目標(biāo)主機(jī),如果ICMPECHOReply(ICMPtype0)數(shù)據(jù)包接受到,說明主機(jī)是存活狀態(tài)。如果沒有就可以初步判斷主機(jī)沒有在線或者使用了某些過濾設(shè)備過濾了ICMP的REPLY。ICMP全稱Internet Control Message Protocol,工作在OSI的網(wǎng)絡(luò)層。它的中文名為因特網(wǎng)控制報(bào)
6、文協(xié)議。ICMP報(bào)文要封裝在IP數(shù)據(jù)報(bào)內(nèi)部才能傳輸。其結(jié)構(gòu)如(圖1)所示。ICMP報(bào)文的格式如(圖2)所示。所有的ICMP報(bào)文的前4個(gè)字節(jié)都是一樣的,但是其他字節(jié)互不相同。其中0-7位是類型字段,8-15位是代碼字段,16-31位是校驗(yàn)和字段。校驗(yàn)和字段為2個(gè)字節(jié),校驗(yàn)的范圍是整個(gè)ICMP報(bào)文。本設(shè)計(jì)僅用到類型為0和8的ICMP報(bào)文,關(guān)于這兩種類型報(bào)文的具體描述詳見(圖3)。20B圖1: ICMP封裝在IP內(nèi)部IP數(shù)據(jù)報(bào)IP首部ICMP報(bào)文31(位)15 167 8類型字段代碼字段校驗(yàn)和字段0(不同類型和代碼有不同內(nèi)容)圖2:ICMP報(bào)文類型代碼描述00回應(yīng)應(yīng)答(Ping應(yīng)答,與類型8的Pin
7、g請求一起使用)80回應(yīng)請求(Ping請求,與類型8的Ping應(yīng)答一起使用)圖3:本設(shè)計(jì)使用的ICMP報(bào)文類型 3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 3.1.1IP頭部數(shù)據(jù)結(jié)構(gòu)typedef struct iphdr unsigned int headlen:4; /ip頭長度 unsigned int wersion:4; /ip版本號 unsigned char tos; /服務(wù)類型unsigned short totallen; /ip包總長度unsigned short id; /ip號unsigned short flag; /標(biāo)記unsigned char ttl; /生存時(shí)間unsigned c
8、har prot; /協(xié)議(UDP TCP)unsigned short checksum; /校驗(yàn)和unsigned int sourceip; /源ipunsigned int destip; /目的ipIpHeader; 3.1.2ICMP頭部數(shù)據(jù)結(jié)構(gòu) typedef struct icmphdr BYTE type; /icmp類型碼,回送請求的類型碼為8 BYTE code; /子類型碼,保存與特定ICMP報(bào)文類型相關(guān)的細(xì)節(jié)信息 USHORT checksum; /校驗(yàn)和 USHORT id; /ICMP報(bào)文id號 USHORT seq; /ICMP數(shù)據(jù)報(bào)的序列號Icmpheader
9、;3.3 系統(tǒng)流程圖3.3.1主流程圖 (圖4)圖4 3.3.2子流程圖(圖5)圖5四、詳細(xì)設(shè)計(jì) 4.1.ICMP報(bào)文分析ICMP是一種差錯(cuò)和控制報(bào)文協(xié)議,用于傳輸錯(cuò)誤報(bào)告和控制信息。ICMP報(bào)文分為頭部和數(shù)據(jù)部分。ICMP報(bào)文封裝在IP數(shù)據(jù)報(bào)中傳輸。IP報(bào)頭中的類型為1時(shí),表示報(bào)文的數(shù)據(jù)部分為ICMP報(bào)文。雖然ICMP報(bào)文由IP報(bào)文傳輸,但是并不能認(rèn)為ICMP是IP的上層協(xié)議,而是IP協(xié)議的有機(jī)補(bǔ)充。把ICMP報(bào)文放在IP包中,是要利用IP的轉(zhuǎn)發(fā)功能。 類型(TYPE)是一個(gè)字節(jié),表示ICMP消息的類型。代碼(CODE)也是一個(gè)字節(jié),表示報(bào)文類型的下一步信息。校驗(yàn)和共有兩個(gè)字節(jié),提供對整個(gè)I
10、CMP報(bào)文的校驗(yàn)和(和IP報(bào)文類型的進(jìn)一步信息)。校驗(yàn)和共兩個(gè)字節(jié),提供對整個(gè)ICMP報(bào)文的校驗(yàn)和。按照協(xié)議的功能來分,ICMP報(bào)文可以分為1) ICMP差錯(cuò)報(bào)文 包括目的不可達(dá)報(bào)告,超時(shí)報(bào)告,參數(shù)出錯(cuò)報(bào)告。2) ICMP控制報(bào)文包括擁塞控制和源抑制報(bào)文,路游控制和重定向報(bào)文。3) ICMP測試報(bào)文包括請求應(yīng)答報(bào)文,時(shí)戳請求應(yīng)答報(bào)文。本課程設(shè)計(jì)就是使用ICMP請求/應(yīng)答報(bào)文來測試目的主機(jī)是否存在,請求者想某特定的主機(jī)發(fā)送請求,其中包含任選的數(shù)據(jù)。目的主機(jī)收到請求后,發(fā)送應(yīng)答報(bào)文。在同一時(shí)刻,一臺機(jī)器可以同時(shí)向多臺主機(jī)發(fā)送請求報(bào)文。ICMP報(bào)文格式如圖6所示,ICMP回送報(bào)文格式如下圖7所示。
11、類型 代碼 校 驗(yàn) 和 數(shù)據(jù)區(qū)(變長)類型 代碼 校驗(yàn)和 標(biāo)志位 序號 任選數(shù)據(jù) 圖6.ICMP報(bào)文格式 圖7.ICMP回應(yīng)報(bào)文格式4.2.程序功能分析 在初始化原始套接字之后,本程序就要開始在一個(gè)IP網(wǎng)段內(nèi)尋找活動主機(jī)。因?yàn)橐獙ふ一顒拥闹鳈C(jī)可能很多,為節(jié)省時(shí)間可以采用多線程編程。結(jié)合核心代碼對程序的具體進(jìn)行分析。 4.2.1使用原始套接字 為了實(shí)現(xiàn)發(fā)送/監(jiān)聽ICMP抱文,必須使用原始套接字,創(chuàng)建原始套接字的代碼如下:SOCKET sockraw;sockraw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,wsa_flag_overlapped
12、);在WSASocket函數(shù)中,我們使用IPPROTO_ICMP表示接受ICMP數(shù)據(jù)包,為了使用發(fā)送接受超時(shí)設(shè)置(設(shè)置SO_RCVTIMEO或SO_SNDTIMEO),必須將標(biāo)志位置為WSA_FLAG_OVERLAPPED。然后調(diào)用setsockopt函數(shù)設(shè)置讀取遲延。在setsockopt函數(shù)中,sockraw是之前創(chuàng)建的原始套接字,設(shè)置SOL_SOCKET表明使用基本套接字處理ICMP抱文。設(shè)置SO_RCVTIMEO表示使用接受超時(shí)設(shè)置,SOSNDTIMEO表示使用發(fā)送超時(shí)設(shè)置,在這里,超時(shí)時(shí)間均設(shè)置為1000ms。4.2.2定義IP頭部和ICMP頭部數(shù)據(jù)結(jié)構(gòu)由于socket發(fā)送/捕獲的是
13、IP包,因此要分別定義IP頭部的數(shù)據(jù)結(jié)構(gòu)和ICMP頭部的數(shù)據(jù)結(jié)構(gòu)。IP頭部的數(shù)據(jù)結(jié)構(gòu)和ICMP頭部的數(shù)據(jù)結(jié)構(gòu)在概要設(shè)計(jì)中已有分析。4.2.3填充并發(fā)送請求類型的ICMP報(bào)文 #define ICMP_ECHO 8 /請求回送 #define DEF_PACKET_SIZE 32 /缺省數(shù)據(jù)報(bào)長度#define MAX_PACKET 1024 /最大數(shù)據(jù)報(bào)長度#char icmp_dataMAX_PACKET; /ICMP數(shù)據(jù)報(bào)最大可能長度Memset(icmp_data,0, MAX_PACKET) /將數(shù)據(jù)報(bào)清空初始化Int datasize=DEF_PACKET_SIZE; /ICMP數(shù)據(jù)
14、報(bào)報(bào)文體的額缺省長度Datasize+=sizeof(icmpHeader); /加上ICMP數(shù)據(jù)頭部 icmp_header *icmp_hdr; char *datapart; icmp_hdr=(icmpheader*)icmp_data; icmp_hdr->type=icmp_echo; /設(shè)置類型 icmp_hdr->id=(ushort)getcurrentthreadid(); /設(shè)置其ID號為當(dāng)前線程號 datapart=icmp_data+sizeof(icmpheader); /計(jì)算出ICMP數(shù)據(jù)報(bào)的數(shù)據(jù)部分 memset(datapart,'A
15、9;,datasize-sizeof(icmphearder); /填入數(shù)據(jù) ((IcmpHeader*)icmp_data)->seq=0; /序列號 ((IcmpHeader*)icmp_data)->check_sum=0; /先將檢驗(yàn)和置0((IcmpHeader*)icmp_data)->checksum=checksum(USHORT*) icmp_data,data_size);/Checksum 為計(jì)算校驗(yàn)和的函數(shù),設(shè)校驗(yàn)和初值為0,然后對數(shù)據(jù)每16位求異或,結(jié)果取反,便得校驗(yàn)和。其代碼如下:unsinged long cksum=0;while (size&
16、gt;1)cksum+=*buffer+;size-=sizeof(ushort);if(size)cksum+=*(uchar)buffer;cksum=(cksum>>16)+(cksum&0xffff);cksum+=(cksum>>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),IP_STRING是目的的主機(jī)的IP地址字符串。 Struct sockaddr_in_dest
17、; Dest.sin_family=AF_INET; Dest.sin_addr.s_addr=inet_addr(IP_STRING); Sendto(sockraw,icmp_data,datasize,0,(sockaddr*)&dest,size of(dest); 4.2.4解析數(shù)據(jù)包 如果所ping的目的主機(jī)存在,那么它會發(fā)出一個(gè)回送應(yīng)答包。這是一個(gè)IP包,受到后解析此數(shù)據(jù)包并獲得其中的ICMP信息。根據(jù)IP報(bào)頭信息中的IP報(bào)頭長度字段,就可以得到ICMP報(bào)文的真實(shí)地址。ICMP數(shù)據(jù)包中的IP地址就是活動主機(jī)的IP。代碼分析如下: #define ICMP_MIN 8 #d
18、efineMAX_PING_PACKET_SIZE(MAX_PACKET+sizeof(IpHeader) char *recvbuf=newMAX_PING_PACKET_SIZE; struct sockaddr_in dest,from,end;int formlen=sizeof(from); int bytes=recvfrom(sockraw,recvbuf,MAX_PACKET,0,(Struct sockaddr*)&from,&fromlen) ipheader *iphdr; icmpheader *icmphdr; unsigned short iphdr
19、len; iphdr=(ipheader*)buf; iphdrlen=iphdr->headlen*4; /IP報(bào)頭的長度 icmphdr=(icmpheader *)(buf+iphdrlen); /跳過IP頭 /數(shù)據(jù)包太短 丟棄 if(bytes<iphdrlen+icmp_min) return; /不是回送請求(ping應(yīng)答),丟棄 if(icmphdr->type!=icmp_echo_reply) return; /ID不相符,丟棄if(icmphdr->id!=(USHORT)getcurrentthreadid() return; /輸出正在使用的IP
20、地址 cout<<"活動主機(jī)"<<inet_ntoa(from->sin_addr)<<endl;五、測試數(shù)據(jù)及其結(jié)果分析經(jīng)調(diào)試,運(yùn)行正常,運(yùn)行結(jié)果如下圖實(shí)驗(yàn)過程中的一些測試:(1) 在實(shí)驗(yàn)室運(yùn)行程序時(shí),發(fā)現(xiàn)某些主機(jī)無法發(fā)現(xiàn)。經(jīng)分析,是因?yàn)檫@些主機(jī)裝有瑞星防火墻,拒絕發(fā)送ICMP回送響應(yīng)信息。如果將其防火墻關(guān)閉,或者修改規(guī)則,能正常發(fā)現(xiàn)。(2) 如果參數(shù)不符合,比如輸入為:scanhost 10.0.,程序能夠發(fā)現(xiàn)格式錯(cuò)誤,并給出警告并提示正確格式:輸入格式錯(cuò)誤:scanhost startip endip。(3) 在格式正確的情況下,如果IP地址格式有錯(cuò)誤,程序不能正常發(fā)現(xiàn)。比如輸入scanhost 10.1 10.15時(shí),程序不能返回IP格式錯(cuò)誤的信息,反而給出發(fā)現(xiàn)主機(jī)10.0.0.3與10.0.0.14。這說明程序?qū)P地址沒有預(yù)先判斷處理。(4) 經(jīng)以上分析,程序容錯(cuò)性不是很好,能檢查基本錯(cuò)誤,但是一些問題(如IP格式檢測)等沒有處理好。(5) 還有,程序把能響應(yīng)ICMP回送請求信息的主體都視為主機(jī)
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版杭州高科技研發(fā)中心勞動合同規(guī)范2篇
- 2024版社區(qū)養(yǎng)老床位設(shè)施投資與管理服務(wù)合同3篇
- 2024年度制造業(yè)新員工試用期勞動合同標(biāo)準(zhǔn)文本3篇
- 2025屆陜西省漢中市重點(diǎn)中學(xué)高考沖刺數(shù)學(xué)模擬試題含解析
- 2025屆江蘇省揚(yáng)州市江都區(qū)大橋高中高三第二次調(diào)研英語試卷含解析
- 2024版家庭保潔服務(wù)+家居用品清洗保養(yǎng)合同3篇
- 2025屆江蘇省大豐市實(shí)驗(yàn)初級中學(xué)高三下學(xué)期第六次檢測數(shù)學(xué)試卷含解析
- 2024年度小學(xué)食堂油煙凈化設(shè)備更換合同3篇
- 2024年度文化創(chuàng)意產(chǎn)業(yè)合作開發(fā)合同書3篇
- 班組與成員簽訂的三年承包目標(biāo)合同
- 常見急救知識培訓(xùn)
- 《義務(wù)教育數(shù)學(xué)課程標(biāo)準(zhǔn)(2022年版)》初中內(nèi)容解讀
- 佛吉亞卓越體系知識手冊
- 第五單元作文 記述與動物的相處 課件七年級語文上冊人教版2024
- 互聯(lián)網(wǎng)新聞信息服務(wù)管理規(guī)定試題
- 2024秋期國家開放大學(xué)??啤渡鐣{(diào)查研究與方法》一平臺在線形考(形成性考核一至四)試題及答案
- GB/T 22517.2-2024體育場地使用要求及檢驗(yàn)方法第2部分:游泳場地
- 10以內(nèi)連加減口算練習(xí)題完整版89
- GB/T 44460-2024消費(fèi)品質(zhì)量分級導(dǎo)則衛(wèi)生潔具
- 學(xué)法指導(dǎo)課件 2024-2025學(xué)年統(tǒng)編版七年級歷史上冊
- 弘揚(yáng)科學(xué)精神激發(fā)創(chuàng)新活力-2024全國科普日主題宣教課件
評論
0/150
提交評論