網絡使用ICMP發現局域網內活動主機_第1頁
網絡使用ICMP發現局域網內活動主機_第2頁
網絡使用ICMP發現局域網內活動主機_第3頁
網絡使用ICMP發現局域網內活動主機_第4頁
網絡使用ICMP發現局域網內活動主機_第5頁
已閱讀5頁,還剩11頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上天津師范大學Tianjin University of Education網絡課程設計所在學院: 信息技術工程學院 專 業: 計算機科學與技術 學 號: 學生姓名: 指導教師: 二一三年六月專心-專注-專業信息技術工程學院網絡課程設計使用ICMP發現局域網內活動主機學生姓名:肖磊指導教師:黃彥 副教授 20 13 年 6月摘 要本程序使用原始套接字生成ICMP報文來進行活動主機的探查。這個程序使用的是回送請求與應答消息。程序的大致思想是把ICMP的數據包類型設置為回送請求,將它發送給網絡上的一個IP地址,如果這個IP地址已經被占用的話,那幺使用位于這個IP地址的主機上

2、的TCP/IP軟件就能夠接收到這個ICMP回送請求,從而返回一個ICMP回送響應(類型號為0)信息。信息封裝在一個IP包中,我們需要解析該IP包,從中找到ICMP數據信息。相反,如果這個IP地址沒有人使用,那幺發送的ICMP回送請求在設定的延時內就不可能得到響應。在初始化原始套接字之后,本程序就要開始在一個IP網段內尋找活動主機。因為要尋找的主機可能很多,為節省時間可以采用多線程編程。 關鍵詞: ICMP協議,Visual c+ 6.0目 錄引 言IP協議的優點是簡潔,但缺少差錯控制和查詢機制,而網際控制報文協議(ICMP)具有補充IP功能的作用。在網絡管理中,常常要確定當前網絡中處于活動狀態

3、的主機,這時可以通過使用ICMP的回送和回送響應消息來完成這項工作。本課程設計的目的就是編制程序,利用ICMP數據包,發現指定網段中的活動主機。通過課程設計,更加熟悉ICMP報文的結構,對ICMP協議有更好的理解和認識。1 課程設計相關技術1.1 ICMP報文格式及類型編制程序前首先要對ICMP報文的格式有一定的了解,ICMP報文是在IP數據報內部傳輸的,其結構如圖10-1所示。 IP數據報 IP首部 ICMP報文 圖10-1 ICMP封裝在IP內部0 7 8 15 16 31(位)類型字段代碼字段校驗和字段(不同類型和代碼有不同內容)圖10-2 ICMP報文ICMP報文的格式如圖10-2所示

4、。所有報文的前4個字節都是一樣的,但是其它字節則互不相同。其中類型字段可以有15個不同的值,以描述特定類型的ICMP報文,某些ICMP報文還使用代碼字段的值來進一步描述不用的條件。按驗和字段為2字節,校驗的范圍是整個ICMP報文。檢驗和是必須的,其計算方法與IP協議頭部校驗和的計算方法一樣。 各種類型的ICMP報文如圖10-3所示(ICMP報文類型),不同類型由報文中的類型字段和代碼字段來共同決定。類 型 代 碼 描 述 0 0 回送響應(PING應答)3 目的不可達0 網絡不可達1 主機不可達2 協議不可達3 端口不可達4 需要進行分片但設置了禁止分片比特5 源主機選擇路由失敗6 無法識別目

5、的網絡7 無法識別目的主機8 源主機被隔離9 目的網絡被禁止10 目的主機被禁止11 由于服務類型(TOS),網絡不可達12 由于服務類型(TOS),主機不可達13 由于過濾,通信被強行禁止14 主機越權15 優先權終止生效 4 0 源端被關閉(基本流控制)5 重定向0 對網絡重定向1 對主機重定向2 對服務類型和網絡重定向3 對服務類型和主機重定向 8 0 回送請求(PING請求)9 0 路由器通告10 0 路由器請求11 超時0 傳輸期間生存期減為01 數據報組裝期間生存期減為012 參數問題0 各種IP頭部錯誤1 缺少必須的選項13 0 時間戳請求14 0 時間戳應答15 0 信息請求(

6、已作廢)16 0 信息應答(已作廢)17 0 地址掩碼請求18 0 地址掩碼應答10-3 ICMP報文類型本課程設計的目的是發現網絡中的活動主機,就是使用ICMP的回送和回送響應消息發現網絡中的活動主機,即Ping消息的請求和應答。那幺,發送的ICMP的數據包類型設置為回送請求(類型號為8)。1.2實驗平臺介紹Visual C+ 6.0,簡稱VC或者VC6.0,是推出的一款C+,將“高級語言”翻譯為“(低級語言)”的程序。Visual C+是一個功能強大的可視化。自1993年Microsoft公司推出Visual C+1.0后,隨著其新版本的不斷問世,Visual C+已成為專業進行開發的首選

7、工具。Visual C+6.0由許多組件組成,包括編輯器、調試器以及程序向導AppWizard、類向導Class Wizard等開發工具。 這些組件通過一個名為Developer Studio的組件集成為和諧的開發環境。2 課程設計過程2.1 使用原始套接字為了實現發送/監聽ICMP報文,必須使用原始套接字,創建原始套接字的代碼如下: socket sockRaw; sockRaw = WSAocket (AF_INET, sock_Raw, IPPROTO_ICMP, NULL, 0, WSA_FLAG_OVERLAPPED); 在WSASocket函數中,我們使用IPPROTO_ICMP表

8、示接收ICMP數據包,為了使用發送超時設置(設置SO_RCVTIMEO或SO_SNDTIMEO),必須將標志位置為WSA_FLAG_OVERLAPPED。然后調用setsockopt函數設置讀取延遲。 Int timeout=1000;setsockopt(sockRaw,SQL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout);setsockopt(sockRaw,SQL_socket,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout); 在setsockopt函數中,sockRaw是之前

9、創建的原始套接字,設置SQL_SOCKET表明使用基本套接字處理ICMP報文。設置SO_RCVTIMEO表示使用接收超時設置,SO_SNDTIMEO表示使用發送超時設置,在這里,超時時間均設置為1000ms。2.2 定義IP頭部和ICMP頭部的數據結構 由于socket發送/捕獲的是IP包,因此要分別定義IP頭部的數據結構ICMP頭部數據結構。 /IP報頭的數據結構 typedef struct iphdrunsigned int headlen:4; /IP頭長度unsigned int version:4; /IP版本號unsigned char tos; /服務類型unsigned sh

10、ort totallen; /IP包總長度 unsigned short id; /ID號unsigned short flag; /標記unsigned char ttl; /生存時間unsigned char prot; /協議(UDP TCP)unsigned short checksum; /校驗和unsigned int sourceIP; /源IPunsigned int destIP; /目的IPIpHeader;/ICMP頭部的數據結構typedef struct icmphdr BYTE type; /ICMP類型碼,回送請求的類型碼為8 BYTE code; /子類型碼,保

11、存與特定ICMP報文類型相關細節信息 USHORT checksum; /校驗和 USHORT id; /ICMP報文ID號(一般用進程號作ID) USHORT seq; /ICMP數據報的序列號IcmpHeader;2.3 填充并發送回送請求類型的ICMP報文為了使收到數據包的目的主機發送響應,我們需要向目的主機發送回送請求類型的ICMP報文。從圖10-3中可知,回送請求的類型號為8。因此ICMP報文的填充代碼如下:#define ICNP_ECHO 8 /請求回送#define DEF_PACKET_SIZE 32 /缺省數據報長度#define MAX_PACKET 1024 /最大數據

12、塊長度char icmp_dataMAX_PACKET; /ICMP數據報最大可能的長度memset(icmp_data,0,MAX_PACKET); /將數據報清空初始化int datasize=DEF_PACKET_SIZE; /ICMP數據報報文體的缺省長度datasize+=sizeof(IcmpHeader); /再加上ICMP頭部的長度IcmpHeader*icmp_hdr:Char *datapart;icmp_hdr = (IcmpHeader*)icmp_data;icmp_hdr->type = ICMP_ECHO; /設置類型icmp_hdr->id = (U

13、SHORT)GetCurrentThreadId(); /設置其ID號為當前線程號Datapart = icmp_data + sizeof(IcmpHeader); /計算出數據報的數據部分Memset(datapart,A,datasize-sizeof(IcmpHeader); /填入數據(IcmpHeader*)icmp_data)->seq= 0; /序列號為0(IcmpHeader*)icmp_data)->checksum = 0; /先將校驗和置0(IcmpHeader*)icmp_data)->checksum=checksum(USHORT*)icmp_d

14、ata,datasize);checksum為校驗和的函數,設校驗和初值為0 ,然后對數據每16為求異或,結果取反,便得校驗和。其代碼如下: USHORT checksum(USHORT *buffer, int size) /計算校驗和 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報文之后,應在ICMP報文之前加上IP報頭并發送出去??烧{用下面的代碼發送數據包。注意,這里的DEST是填入目的主機IP地址的一個sockaddr_in數據結構,IPSTRING是目的主機的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程序流程圖開 始將Start_IP添入到dest中起始IP地址Start_IP結束IP地址End_IP建立并初始化目的主機的Sockaddr_in數據結構dest構造原始套接字,并初始化Start_IPEnd_IP? N Y Y線程數目太多?等待一定時間 N創建一個線程并執行Start_IP+ Y 還有線程在執行?等待一定時間 N結 束 圖1 主程序流程圖開 始填充ICMP數據報發送數據報接收數報去掉IP報頭,獲取ICMP信息數據包太短? Y N不是回送響應? Y NID不符合? Y N輸出數據報中的IP地址 結 束圖2 子程序流程圖結論通

17、過此次課程設計,我加深了對ICMP協議的理解,鞏固了課堂知識。由于網絡協議比較抽象、難學,自己學得也不夠深入,加上還要把所學知識運用到實踐中來,所以一開始時感覺比較困難,而且在調試過程中難免要出現一些如變量沒有定義、缺少頭文件、大小寫錯誤以及其它問題,通過查閱文獻資料、向同學請教以及認真地思考與分析,逐一對錯誤進行了調試,才使得程序能正常運行,大體上符合了設計的目的和要求。在程序的調試過程中,出現問題是正常的,關鍵是如何去發現問題的根源,然后去解決它。為了能夠快速地確定錯誤的原因,盡快的排除程序錯誤,通常把程序錯誤劃分為三種類型:語法錯誤、運行錯誤和邏輯錯誤。在設計過程中,我們可以先找出問題,

18、看是屬于哪一類錯誤,然后再將問題一一解決,這樣既解決了疑難問題又節省了不少時間。參考文獻1 安淑芝,黃彥 .計算機網絡 M . 北京:中國鐵道出版社 .20112 吳功宜, 胡曉英, 張仁, 何云, 王寧編著. 計算機網絡課程設計. 北京:機械工業出版社, 2010.83 吳功宜著. 計算機網絡. 北京:清華大學出版社, 20044 陳堅, 陳偉. Visual C+網絡高級編程M. 北京: 人民郵電出版社,20015 郭國強. 計算機網絡與Internet教程. 北京: 清華出版社,2006.116 楊豐瑞, 楊豐任. 實用教程最新計算機網絡. 北京: 中國鐵道出版社,2001.7致謝在本課程設計論文即將完成之際,我想對所有曾經給過我幫助和支持的同學老師表示衷心的感謝。感謝我的老師對我課程設計的指導,書到用時方恨少,在這篇論文的寫作過程中,我深感自己的水平還非常的欠缺。生命不息,學習不止,人生就是一個不斷學習和完善的過程,敢問路在何方?路在腳下

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論