版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、長沙理工大學網(wǎng)絡協(xié)議編程課程設計報告帥哥 學 院 計通學院 專 業(yè) 網(wǎng)絡工程 班 級 網(wǎng)絡08-02班 學 號 200858080110 學生姓名 帥 哥 指導教師 劉 青 課程成績 完成日期 2011年6月15日 課程設計成績評定學 院 計通學院 專 業(yè) 網(wǎng)絡工程 班 級 網(wǎng)絡08-02班 學 號 200858080110 學生姓名 帥哥 指導教師 劉 青 完成日期 2011年7月2日 指導教師對學生在課程設計中的評價評分項目優(yōu)良中及格不及格課程設計中的創(chuàng)造性成果學生掌握課程內(nèi)容的程度課程設計完成情況課程設計動手能力文字表達學習態(tài)度規(guī)范要求課程設計論文的質(zhì)量指導教師對課程設計的評定意見綜合成
2、績 指導教師簽字 2011年 月 日課程設計任務書計算機與通信工程學院 網(wǎng)絡工程專業(yè) 課程名稱網(wǎng)絡技術課程設計時間20102011學年第二學期1718周學生姓名帥哥指導老師劉青題 目icmp掃描程序的設計與實現(xiàn)主要內(nèi)容:(1)了解icmp協(xié)議,知道icmp協(xié)議的概念,內(nèi)容,重要性等。(2) 學會編寫icmp掃描程序。要求:(1)綜合運用計算機網(wǎng)絡基本理論和編程語言設計本系統(tǒng)。(2)學會文獻檢索的基本方法和綜合運用文獻的能力。(3)通過課程設計培養(yǎng)嚴謹?shù)目茖W態(tài)度,認真的工作作風和團隊協(xié)作精神。應當提交的文件:(1)課程設計學年論文。(2)課程設計附件(相關圖紙、設備配置清單、報告等)。icmp掃
3、描程序的設計與實現(xiàn)學生姓名:帥哥 指導教師:劉青摘要:我們常用ping程序來判斷一個特定的主機是否處于活動狀態(tài).該程序發(fā)送一個icmp回應請求報文給主機,然后等待返回的icmp報文回應應答就可以知道自己是否能成功的訪問到那臺機器.本次課程設計涉及到mfc的應用,要在充分了解套接字的實現(xiàn)以及ip,icmp的格式,功能等的基礎上才能實現(xiàn)此設計。關鍵字:icmp;掃描;程序;協(xié)議;目 錄1 引言31.1 課程設計目的31.2 課程設計要求32 概要設計42.1 設計原理42.2 數(shù)據(jù)結(jié)構(gòu)設計42.3 系統(tǒng)流程圖63 詳細設計83.1 icmp報文分析83.2 程序功能分析94 測試結(jié)果124.1 遇
4、到問題124.2 測試結(jié)果125 結(jié)束語13參考文獻14附錄及源代碼151 引言1.1 課程設計目的ip協(xié)議的優(yōu)點是簡單,但缺少差錯控制和查詢機制,而網(wǎng)際控制報文協(xié)議(icmp具有補充ip功能的作用。在網(wǎng)絡管理中,常常要確定當前網(wǎng)絡在紅處于活動狀態(tài)的主機,這時可以通過icmp的回送和回送響應消息來完成這項工作。這課程設計的目的就是編制程序,利用icmp數(shù)據(jù)包,發(fā)現(xiàn)網(wǎng)絡中的活動主機,即ping消息的請求和應答。通過課程設計,熟悉icmp報文的結(jié)構(gòu),對icmp協(xié)議有更好的理解和認識,培養(yǎng)綜合運用網(wǎng)絡知識解決實際問題能力。1.2 課程設計要求設計程序,其功能是發(fā)送icmp數(shù)據(jù)包,以獲取指定望段中的活
5、動主機,并將結(jié)果顯示在標準輸出設備上程序的具體要求如下:1用命令形式運行scanhost為程序名;start_ip為被搜索網(wǎng)段;end_ip為被搜索網(wǎng)段的結(jié)束ip地址。如在命令行輸入 scanhost 192.168.0.1 192.168.0.1002輸出格式活動主機1的ip地址活動主機2的ip地址 活動主機 n的ip地址2 概要設計2.1 設計原理本程序使用的原始套接字生成icmp請求/應答報文來進行活動主機的探查。這個程序使用的是回送請求和應答消息。程序的大致思想是把icmp的數(shù)據(jù)報類型設置為回送請求,將它發(fā)送給網(wǎng)絡上的一個ip地址,如果這個ip地址已經(jīng)被占用的話,那么使用位于這個ip地
6、址的主機上的tcp/ip軟件就能接受到這個icmp回送請求,從而返回一個icmp回送請求(類型號為0)信息。信息封裝在一個ip包中,我們需要解析該ip包,從中找到icmp數(shù)據(jù)信息,相反,如果這個ip地址沒有人使用,那么發(fā)送的icmp回送請求在設定的延時內(nèi)就不可能得到響應。2.2 數(shù)據(jù)結(jié)構(gòu)設計 2.2.1ip頭部數(shù)據(jù)結(jié)構(gòu)typedef struct iphdr unsigned int headlen:4; /ip頭長度 unsigned int wersion:4; /ip版本號 unsigned char tos; /服務類型unsigned short totallen; /ip包總長度u
7、nsigned short id; /ip號unsigned short flag; /標記unsigned char ttl; /生存時間unsigned char prot; /協(xié)議(udp tcp)unsigned short checksum; /校驗和unsigned int sourceip; /源ipunsigned int destip; /目的ipipheader;2.2.2icmp頭部數(shù)據(jù)結(jié)構(gòu) typedef struct icmphdr byte type; /icmp類型碼,回送請求的類型碼為8 byte code; /子類型碼,保存與特定icmp報文類型相關的細節(jié)信息
8、 ushort checksum; /校驗和 ushort id; /icmp報文id號 ushort seq; /icmp數(shù)據(jù)報的序列號icmpheader;2.3 系統(tǒng)流程圖2.3.1主流程圖 (圖1) 開 始構(gòu)造原始套接字,并初始化建立并初始化木的主機的sockaddr_in數(shù)據(jù)結(jié)構(gòu)dest起始ip地址-start_ip結(jié)束ip地址-end ip將start_ip填入到dest中start_iptype=icmp_echo; /設置類型 icmp_hdr-id=(ushort)getcurrentthreadid(); /設置其id號為當前線程號 datapart=icmp_data+s
9、izeof(icmpheader); /計算出icmp數(shù)據(jù)報的數(shù)據(jù)部分memset(datapart,a,datasize-sizeof(icmphearder); /填入數(shù)據(jù) ((icmpheader*)icmp_data)-seq=0; /序列號 ((icmpheader*)icmp_data)-check_sum=0; /先將檢驗和置0((icmphead*)icmp_data)-checksum=checksum(ushort*) icmp_data,data_size);checksum 為計算校驗和的函數(shù),設校驗和初值為0,然后對數(shù)據(jù)每16位求異或,結(jié)果取反,便得校驗和。其代碼如下
10、:unsinged long cksum=0;while (size1)cksum+=*buffer+;size-=sizeof(ushort);if(size)cksum+=*(uchar)buffer;cksum=(cksum16)+(cksum&0xffff);cksum+=(cksum16);return (ushort)(cksum); 填充icmp報文之后,應在icmp報文之前加上ip報頭并發(fā)送出去??烧{(diào)用下面的代碼發(fā)送數(shù)據(jù)包。注意,這里的dest是填入目的主機的ip地址的一個sockaddr_in數(shù)據(jù)結(jié)構(gòu),ip_string是目的的主機的ip地址字符串。 struct socka
11、ddr_in_dest; 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);3.2.4解析數(shù)據(jù)包 如果所ping的目的主機存在,那么它會發(fā)出一個回送應答包。這是一個ip包,受到后解析此數(shù)據(jù)包并獲得其中的icmp信息。根據(jù)ip報頭信息中的ip報頭長度字段,就可以得到icmp報文的真實地址。icmp數(shù)據(jù)包中的ip地址就是活動主機的ip。代碼分析如下: #define icmp_mi
12、n 8 #define max_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 iphdrl
13、en; iphdr=(ipheader*)buf; iphdrlen=iphdr-headlen*4; /ip報頭的長度 icmphdr=(icmpheader *)(buf+iphdrlen); /跳過ip頭 /數(shù)據(jù)包太短 丟棄 if(bytestype!=icmp_echo_reply) return; /id不相符,丟棄if(icmphdr-id!=(ushort)getcurrentthreadid() return; /輸出正在使用的ip地址 cout活動主機sin_addr)endl;4 測試結(jié)果4.1 遇到問題1 找不到頭文件。因為頭文件存放位置錯誤。2 變量沒有定義。因為變量沒
14、有定義和變量名書寫寫錯。3 指針書寫錯誤。4 宏參數(shù)列表錯誤。5 結(jié)構(gòu)體指針傳遞錯誤。cannot covert from struct iphdr * to struct icmphar * ip ipheader * iphdr.因為缺少成員運算符”.”。4.2 測試結(jié)果 經(jīng)反復調(diào)試,運行正常,運行結(jié)果如下(圖5)5 結(jié)束語回顧過去的一個星期,有緊張,有忙碌,有苦惱,也有歡笑,在不斷的改進與努力中,終于可以實現(xiàn)利用icmp發(fā)現(xiàn)網(wǎng)絡上的活動主機。通過這次課程設計,我加深了對icmp協(xié)議的理解,鞏固了課堂知識,為以后學習網(wǎng)絡協(xié)議打下基礎。在課程設計中,我和搭檔李寶詳配合的很融洽,相互幫助,共同
15、進步。在調(diào)試過程中難免要出現(xiàn)一些問題,為了能夠快速地確定錯誤的原因,盡快的排除程序邏輯錯誤,通常把程序錯誤劃分為三種類型:語法錯誤、運行錯誤和邏輯錯誤。在這次網(wǎng)絡課程設計中,也發(fā)生了這樣那樣的錯誤,如變量沒有定義、缺少頭文件。通過查閱文獻資料、請教老師和同學討論,以及自己認真地分析與思考,逐一對錯誤進行了調(diào)試,使程序基本能正常運行,大體上符合了設計的意圖和設計的要求。由于網(wǎng)絡協(xié)議比較抽象,比較難學,也學得不深入,何況還要把所學知識運用到實踐中來,真是一大難題,所以一開始時,真是有點一籌莫展,網(wǎng)上查有關資料卻總覺得不搭干。通過這次課程設計,我明白做什么事都要沉得下心,在搞任何研發(fā)工作時,遇到問題
16、沉著冷靜是特別重要的,千萬不能有半點浮躁的心情。在程序的調(diào)試過程中,出現(xiàn)問題是正常的,關鍵是如何去發(fā)現(xiàn)問題的根源,然后去解決它。其實寫程序并不是很花時間,改錯才是最花時間的的事情。還有一點特別重要的是,在設計過程中或者是改錯的過程中遇到棘手的問題時,借助網(wǎng)絡去解決的確是一種很好的選擇。一個星期的課程設計,我過的很充實,感覺每天都在學習,每天都在進步,在課程設計完成之際,我在此向所有關心我?guī)椭业膭⒗蠋熀屯瑢W們致以最真誠的感謝。在這次課程設計中,我從劉老師身上學到了很多東西,他認真負責,知識豐富,要求嚴格,無論在理論上還是在系統(tǒng)調(diào)試中,都給與我很大的幫助,使我得到很大的提高,這對于我以后的工作和
17、學習都有一種巨大的幫助,在此再次感謝劉老師耐心的耐心輔導。參考文獻1吳功宜,胡曉英等著.計算機網(wǎng)絡課程設計.北京:機械工業(yè)出版社。20052周明天等,tcp/ip網(wǎng)絡原理與技術.北京:清華大學出版社.3陳堅,陳偉.visual c+網(wǎng)絡高級編程m.北京:人民郵電出版社,2001.4方路平,曹平,林毅,等采用ip多址廣播技術的應用系統(tǒng)開發(fā)j.計算機系統(tǒng)應用,20015蔣東興.windowssockets網(wǎng)絡程序設計大全m.北京:清華大學出版社,1999.附錄及源代碼 1. scanhost.h#pragma pack(4)#pragma comment(lib,ws2_32.lib)#defin
18、e win32_lean_and_mean#include #include #include #include #include #include /the ip headertypedef struct iphdr unsigned int headlen:4; /ip頭長度 unsigned int wersion:4; /ip版本號 unsigned char tos; /服務類型unsigned short totallen; /ip包總長度unsigned short id; /ip號unsigned short flag; /標記unsigned char ttl; /生存時間u
19、nsigned char prot; /協(xié)議(udp tcp)unsigned short checksum; /校驗和unsigned int sourceip; /源ipunsigned int destip; /目的ipipheader;/icmp headertypedef struct icmphdr byte type; /icmp類型碼,回送請求的類型碼為8 byte code; /子類型碼,保存與特定icmp報文類型相關的/節(jié)信息 ushort checksum; /校驗和 ushort id; /icmp報文id號 ushort seq; /icmp數(shù)據(jù)報的序列號icmphe
20、ader;#define icmp_echo 8 /請求回送#define icmp_echo_reply 0 /請求回應#define icmp_min 8 /icmp包頭長度(最小icmp包長度)#define status_failed 0xffff /錯誤碼#define def_packet_size 32 /缺省數(shù)據(jù)報長度#define max_packet 1024 /最大數(shù)據(jù)報長度#define max_ping_packet_size (max_packet + sizeof(ipheader) /最大接受數(shù)據(jù)報長度void fill_icmp_date(char * ,in
21、t); /填充icmp包ushort checksum(ushort *,int); /校驗和函數(shù)void decode_resp(char*,int,struct sockaddr_in *); /找到此數(shù)據(jù)報ip地址dword winapi findip(lpvoid pipaddrtemp); /線程調(diào)用子函數(shù)2. scanhost.cpp #include scanhost.hwsadata wsadata;socket sockraw;struct sockaddr_in dest,from,end;int fromlen=sizeof(from);char * recvbuf=ne
22、w charmax_ping_packet_size;unsigned int addr=0;long threadnumcounter=0,threadnumlimit=20;long *aa=&threadnumcounter;void main(int argc,char *argv)if(argc!=3)cout輸入格式錯誤:scanhost start_ip end_ipendl;return;if(wsastartup(makeword(2,1),&wsadata)!=0)coutwsastartup failed:getlasterror()endl;exitprocess(st
23、atus_failed);/創(chuàng)建原始套接字sockraw=wsasocket(af_inet,sock_raw,ipproto_icmp,null,0,wsa_flag_overlapped);if(sockraw=invalid_socket)coutwsasocket() failed:wsagetlasterror()endl;exitprocess(status_failed); /設置讀取延時 int timeout=1000; int bread=setsockopt(sockraw,sol_socket,so_rcvtimeo,(char*)&timeout,sizeof(tim
24、eout); if(bread=socket_error) coutfail to set recv timeout:wsagetlasterror()endl; exitprocess(status_failed); timeout=1000; bread=setsockopt(sockraw,sol_socket,so_rcvtimeo,(char*)&timeout,sizeof(timeout); if(bread=socket_error) coutfailed to set send timeout:wsagetlasterror()endl; exitprocess(status
25、_failed); memset(&dest,0,sizeof(dest); unsigned long startip,endip; dest.sin_family=af_inet; dest.sin_addr.s_addr=inet_addr(argv1); startip=inet_addr(argv1); end.sin_family=af_inet; end.sin_addr.s_addr=inet_addr(argv2); endip=inet_addr(argv2); handle hthread; while(htonl(startip)threadnumlimit) slee
26、p(5000); continue; dword threadid; sockaddr_in * pipaddrtemp=new(sockaddr_in); if(!pipaddrtemp) coutmemory alloc failedtype = icmp_echo;icmp_hdr-id=(ushort)getcurrentthreadid();datapart=icmp_data+sizeof(icmpheader);memset(datapart,a,datasize-sizeof(icmpheader);void decode_resp(char *buf,int bytes,st
27、ruct sockaddr_in *from)ipheader *iphdr;icmpheader *icmphdr;unsigned short iphdrlen;iphdr=(ipheader *)buf;iphdrlen=iphdr-headlen * 4;icmphdr=(icmpheader *)(buf+iphdrlen); /數(shù)據(jù)包太短 丟棄if(bytestype!=icmp_echo_reply) return;if(icmphdr-id!=(ushort)getcurrentthreadid() return;cout活動主機sin_addr)1)cksum+=*buffer+; size-=sizeof(ushort); if(size)cksum+=*(uchar*)buffer; cksum=(cksum16)+(cksum & 0xffff); cksum+=(cksum16); return (ushort)(cksum);dword winapi findip(lpvoid pipaddrtemp)interlockedincrement(aa); char icmp_datamax_packe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版全新業(yè)務人員聘用合同下載
- 家具行業(yè)助理工作總結(jié)
- 2024版網(wǎng)約車司機服務合同3篇
- 二零二五年度建筑工程用瀝青混合料購銷合同3篇
- 2025版采光井工程技術咨詢與培訓合同3篇
- 二零二五年度房屋征收補償合同公證所需材料匯編3篇
- 家庭裝修員工作總結(jié)
- 2024版福州二手房交易合同標準文本
- 二零二五年度海洋工程發(fā)電機組租賃及運輸服務合同3篇
- 圖書館內(nèi)部照明改造合同(2篇)
- JTJ073.1-2001 公路水泥混凝土路面 養(yǎng)護技術規(guī)范
- 2024智慧醫(yī)院醫(yī)用耗材SPD供應鏈績效評價指南
- 護士分級分類管理規(guī)定及評價細則
- GB/T 15115-2024壓鑄鋁合金
- AQ 1029-2019 煤礦安全監(jiān)控系統(tǒng)及檢測儀器使用管理規(guī)范
- 玄武巖纖維簡介演示
- 米什金貨幣金融學英文版習題答案chapter1英文習題
- 未成年旅游免責協(xié)議書
- 建筑公司員工合規(guī)手冊
- 質(zhì)量保證的基本原則與方法
- 第1講-句子結(jié)構(gòu)
評論
0/150
提交評論