版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、課程設(shè)計()報告( 2011 / 2012 學(xué)年 第 二 學(xué)期)題目: 活動主機(jī)的檢測 專 業(yè) 計算機(jī)科學(xué)與技術(shù) 學(xué) 生 姓 名 班 級 學(xué) 號 指 導(dǎo) 教 師 指 導(dǎo) 單 位 計算機(jī)學(xué)院 計算機(jī)系統(tǒng)與網(wǎng)絡(luò)教學(xué)中心日 期 2012.06.112012.06.22指導(dǎo)教師成績評定表學(xué)生姓名班級學(xué)號專業(yè)計算機(jī)科學(xué)與技術(shù)評分內(nèi)容評分標(biāo)準(zhǔn)優(yōu)秀良好中等差平時成績認(rèn)真對待課程設(shè)計,遵守實驗室規(guī)定,上機(jī)不遲到早退,不做和設(shè)計無關(guān)的事設(shè)計成果設(shè)計的科學(xué)、合理性功能豐富、符合題目要求 界面友好、外觀漂亮、大方程序功能執(zhí)行的正確性程序算法執(zhí)行的效能設(shè)計報告設(shè)計報告正確合理、反映系統(tǒng)設(shè)計流程文檔內(nèi)容詳實程度文檔格式
2、規(guī)范、排版美觀驗收答辯簡練、準(zhǔn)確闡述設(shè)計內(nèi)容,能準(zhǔn)確有條理回答各種問題,系統(tǒng)演示順利。評分等級指導(dǎo)教師簡短評語指導(dǎo)教師簽名日期2012.06.23備注評分等級有五種:優(yōu)秀、良好、中等、及格、不及格12 / 14文檔可自由編輯打印題目一:活動主機(jī)的檢測一、 課題內(nèi)容和要求1. 設(shè)計內(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è)計要求(1)將目的主機(jī)的狀態(tài)顯示在屏
3、幕上,具體格式: 開始主機(jī)掃描 活動主機(jī):xx.xx.xx.xx 活動主機(jī):xx.xx.xx.xx (2)要求有良好的編程規(guī)范和注釋,編程所使用的操作系統(tǒng)、語言和編譯環(huán)境不限,但是需在課程設(shè)計報告文檔中予以說明。二、需求分析2.1 使用原始套接字,實現(xiàn)發(fā)送/監(jiān)聽ICMP報文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è)計中已有分析。2.3填充并發(fā)送請求類型的ICMP報文, 填充ICMP報文后,應(yīng)在ICMP報文之前加上IP報頭并發(fā)送出去。2.4解析數(shù)據(jù)包:如果所ping的目的主機(jī)存在,那么
4、它會發(fā)出一個回送應(yīng)答包。這是一個IP包,受到后解析此數(shù)據(jù)包并獲得其中的ICMP信息。根據(jù)IP報頭信息中的IP報頭長度字段,就可以得到ICMP報文的真實地址。ICMP數(shù)據(jù)包中的IP地址就是活動主機(jī)的IP。三、概要設(shè)計 3.1 設(shè)計原理 本程序使用的原始套接字生成ICMP請求/應(yīng)答報文來進(jìn)行活動主機(jī)的探查。這個程序使用的是回送請求和應(yīng)答消息。程序的大致思想是把ICMP的數(shù)據(jù)報類型設(shè)置為回送請求,將它發(fā)送給網(wǎng)絡(luò)上的一個IP地址,如果這個IP地址已經(jīng)被占用的話,那么使用位于這個IP地址的主機(jī)上的TCP/IP軟件就能接受到這個ICMP回送請求,從而返回一個ICMP回送請求(類型號為0)信息。信息封裝在一
5、個IP包中,我們需要解析該IP包,從中找到ICMP數(shù)據(jù)信息,相反,如果這個IP地址沒有人使用,那么發(fā)送的ICMP回送請求在設(shè)定的延時內(nèi)就不可能得到響應(yīng)。本設(shè)計的主體思想是使用ICMPECHO數(shù)據(jù)包來探測指定網(wǎng)段內(nèi)的活動主機(jī)。具體方法是:通過簡單的發(fā)送一個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)控制報
6、文協(xié)議。ICMP報文要封裝在IP數(shù)據(jù)報內(nèi)部才能傳輸。其結(jié)構(gòu)如(圖1)所示。ICMP報文的格式如(圖2)所示。所有的ICMP報文的前4個字節(jié)都是一樣的,但是其他字節(jié)互不相同。其中0-7位是類型字段,8-15位是代碼字段,16-31位是校驗和字段。校驗和字段為2個字節(jié),校驗的范圍是整個ICMP報文。本設(shè)計僅用到類型為0和8的ICMP報文,關(guān)于這兩種類型報文的具體描述詳見(圖3)。20B圖1: ICMP封裝在IP內(nèi)部IP數(shù)據(jù)報IP首部ICMP報文31(位)15 167 8類型字段代碼字段校驗和字段0(不同類型和代碼有不同內(nèi)容)圖2:ICMP報文類型代碼描述00回應(yīng)應(yīng)答(Ping應(yīng)答,與類型8的Pin
7、g請求一起使用)80回應(yīng)請求(Ping請求,與類型8的Ping應(yīng)答一起使用)圖3:本設(shè)計使用的ICMP報文類型 3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計 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; /生存時間unsigned c
8、har prot; /協(xié)議(UDP TCP)unsigned short checksum; /校驗和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報文類型相關(guān)的細(xì)節(jié)信息 USHORT checksum; /校驗和 USHORT id; /ICMP報文id號 USHORT seq; /ICMP數(shù)據(jù)報的序列號Icmpheader
9、;3.3 系統(tǒng)流程圖3.3.1主流程圖 (圖4)圖4 3.3.2子流程圖(圖5)圖5四、詳細(xì)設(shè)計 4.1.ICMP報文分析ICMP是一種差錯和控制報文協(xié)議,用于傳輸錯誤報告和控制信息。ICMP報文分為頭部和數(shù)據(jù)部分。ICMP報文封裝在IP數(shù)據(jù)報中傳輸。IP報頭中的類型為1時,表示報文的數(shù)據(jù)部分為ICMP報文。雖然ICMP報文由IP報文傳輸,但是并不能認(rèn)為ICMP是IP的上層協(xié)議,而是IP協(xié)議的有機(jī)補(bǔ)充。把ICMP報文放在IP包中,是要利用IP的轉(zhuǎn)發(fā)功能。 類型(TYPE)是一個字節(jié),表示ICMP消息的類型。代碼(CODE)也是一個字節(jié),表示報文類型的下一步信息。校驗和共有兩個字節(jié),提供對整個I
10、CMP報文的校驗和(和IP報文類型的進(jìn)一步信息)。校驗和共兩個字節(jié),提供對整個ICMP報文的校驗和。按照協(xié)議的功能來分,ICMP報文可以分為1) ICMP差錯報文 包括目的不可達(dá)報告,超時報告,參數(shù)出錯報告。2) ICMP控制報文包括擁塞控制和源抑制報文,路游控制和重定向報文。3) ICMP測試報文包括請求應(yīng)答報文,時戳請求應(yīng)答報文。本課程設(shè)計就是使用ICMP請求/應(yīng)答報文來測試目的主機(jī)是否存在,請求者想某特定的主機(jī)發(fā)送請求,其中包含任選的數(shù)據(jù)。目的主機(jī)收到請求后,發(fā)送應(yīng)答報文。在同一時刻,一臺機(jī)器可以同時向多臺主機(jī)發(fā)送請求報文。ICMP報文格式如圖6所示,ICMP回送報文格式如下圖7所示。
11、類型 代碼 校 驗 和 數(shù)據(jù)區(qū)(變長)類型 代碼 校驗和 標(biāo)志位 序號 任選數(shù)據(jù) 圖6.ICMP報文格式 圖7.ICMP回應(yīng)報文格式4.2.程序功能分析 在初始化原始套接字之后,本程序就要開始在一個IP網(wǎng)段內(nèi)尋找活動主機(jī)。因為要尋找活動的主機(jī)可能很多,為節(jié)省時間可以采用多線程編程。結(jié)合核心代碼對程序的具體進(jìn)行分析。 4.2.1使用原始套接字 為了實現(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è)置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è)置,SOSNDTIMEO表示使用發(fā)送超時設(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è)計中已有分析。4.2.3填充并發(fā)送請求類型的ICMP報文 #define ICMP_ECHO 8 /請求回送 #define DEF_PACKET_SIZE 32 /缺省數(shù)據(jù)報長度#define MAX_PACKET 1024 /最大數(shù)據(jù)報長度#char icmp_dataMAX_PACKET; /ICMP數(shù)據(jù)報最大可能長度Memset(icmp_data,0, MAX_PACKET) /將數(shù)據(jù)報清空初始化Int datasize=DEF_PACKET_SIZE; /ICMP數(shù)據(jù)
14、報報文體的額缺省長度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); /計算出ICMP數(shù)據(jù)報的數(shù)據(jù)部分 memset(datapart,'A
15、9;,datasize-sizeof(icmphearder); /填入數(shù)據(jù) ((IcmpHeader*)icmp_data)->seq=0; /序列號 ((IcmpHeader*)icmp_data)->check_sum=0; /先將檢驗和置0((IcmpHeader*)icmp_data)->checksum=checksum(USHORT*) icmp_data,data_size);/Checksum 為計算校驗和的函數(shù),設(shè)校驗和初值為0,然后對數(shù)據(jù)每16位求異或,結(jié)果取反,便得校驗和。其代碼如下: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報文之后,應(yīng)在ICMP報文之前加上IP報頭并發(fā)送出去??烧{(diào)用下面的代碼發(fā)送數(shù)據(jù)包。注意,這里的dest是填入目的主機(jī)的IP地址的一個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ā)出一個回送應(yīng)答包。這是一個IP包,受到后解析此數(shù)據(jù)包并獲得其中的ICMP信息。根據(jù)IP報頭信息中的IP報頭長度字段,就可以得到ICMP報文的真實地址。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報頭的長度 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é)果如下圖實驗過程中的一些測試:(1) 在實驗室運(yùn)行程序時,發(fā)現(xiàn)某些主機(jī)無法發(fā)現(xiàn)。經(jīng)分析,是因為這些主機(jī)裝有瑞星防火墻,拒絕發(fā)送ICMP回送響應(yīng)信息。如果將其防火墻關(guān)閉,或者修改規(guī)則,能正常發(fā)現(xiàn)。(2) 如果參數(shù)不符合,比如輸入為:scanhost 10.0.,程序能夠發(fā)現(xiàn)格式錯誤,并給出警告并提示正確格式:輸入格式錯誤:scanhost startip endip。(3) 在格式正確的情況下,如果IP地址格式有錯誤,程序不能正常發(fā)現(xiàn)。比如輸入scanhost 10.1 10.15時,程序不能返回IP格式錯誤的信息,反而給出發(fā)現(xiàn)主機(jī)10.0.0.3與10.0.0.14。這說明程序?qū)P地址沒有預(yù)先判斷處理。(4) 經(jīng)以上分析,程序容錯性不是很好,能檢查基本錯誤,但是一些問題(如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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024門面租賃合同電子版租賃雙方爭議解決途徑3篇
- 廣西南寧市中考語文模擬試卷六套【附參考答案】
- 專業(yè)技師合作合同書格式版
- 2024版?zhèn)€人房屋租賃給公司合同
- SaaS服務(wù)平臺標(biāo)準(zhǔn)化服務(wù)協(xié)議樣例(2024年版)版B版
- 3 表內(nèi)乘法(一)(說課稿)-2024-2025學(xué)年二年級上冊數(shù)學(xué)蘇教版
- 職業(yè)學(xué)生入住宿舍申請表
- 福建省南平市王臺中學(xué)2020-2021學(xué)年高二物理聯(lián)考試題含解析
- 2024版?zhèn)€人獨(dú)資合作協(xié)議
- 2024年采購流程優(yōu)化與合作合同3篇
- 湖北省武漢市洪山區(qū)2023-2024學(xué)年六年級上學(xué)期語文期末試卷(含答案)
- 飛書手把手使用教程培訓(xùn)
- 2025屆山東省濰坊市高三物理第一學(xué)期期中經(jīng)典試題含解析
- 《醫(yī)院醫(yī)療質(zhì)量安全管理提升年實施方案》
- 豆腐制作工藝
- 臨床提高吸入劑使用正確率品管圈成果匯報
- “中華老字號”申報書
- 礦山智能化監(jiān)控系統(tǒng)
- 五年級口算題卡每天100題帶答案
- 年產(chǎn)500t o-甲基-n-硝基異脲技改項目可研報告
- 光伏項目居間服務(wù)合同協(xié)議書
評論
0/150
提交評論