版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
實(shí)驗(yàn)報告課程名稱 網(wǎng)絡(luò)通信程序設(shè)計實(shí)驗(yàn)儀器 計算機(jī) 實(shí)驗(yàn)名稱 路由跟蹤 系別—計算機(jī)學(xué)院.專業(yè)班級/學(xué)號___學(xué)生姓名 實(shí)驗(yàn)日期 2014年4月6日成績 指導(dǎo)教師 焦健實(shí)驗(yàn)二路由跟蹤實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)分析程序功能結(jié)構(gòu)。熟悉ICMP協(xié)議的工作原理和路由跟蹤的原理。掌握VC6.0下程序調(diào)試、運(yùn)行的基本方法。二、實(shí)驗(yàn)原理路由跟蹤的實(shí)現(xiàn)就是巧妙地利用了ICMP報文的TTL超時報文。其實(shí)現(xiàn)過程如下:源主機(jī)先向目的主機(jī)發(fā)送一個回應(yīng)請求報文(類型8),TTL值設(shè)為1,第一個路由器收到后將TTL減1,這樣TTL變?yōu)?,分組被廢除。同時路由器向源主機(jī)發(fā)送一個TTL超時報文(類型為11),報文的IP包頭中的源IP地址就是第一個路由器的地址,源主機(jī)就可以通過對該報文進(jìn)行分析,得到第一個路由器的地址。接著發(fā)送TTL等于2的報文得到第二個路由器地址,再發(fā)TTL等于3的報文。如此下去直到收到目的主機(jī)的回應(yīng)應(yīng)答報文(類型為0)或目的不可達(dá)報文(類型為3),或者到了最大跳數(shù)(要檢測路由器個數(shù)的最大值)。可以看到,對TTL的設(shè)置是實(shí)現(xiàn)跟蹤的關(guān)鍵,使用函數(shù)setsockopt(m_Sock,IPPROTO_IP,IP_TTL,(LPSTR)&TTL,sizeof(int))可以對其進(jìn)行設(shè)置,m_Sock是所創(chuàng)建的套接字,IP_TTL說明是進(jìn)行TTL設(shè)置,TTL即是要設(shè)置的TTL值,為一個整形數(shù)值。其實(shí)現(xiàn)流程如圖1所示圖1路由跟蹤流程圖三、實(shí)驗(yàn)內(nèi)容1、按照附錄內(nèi)容給RouteTrace程序添加代碼,增加注釋,調(diào)試程序通過。源代碼:RouteTrace?cpp//RouteTrace.cpp:Definestheclassbehaviorsfortheapplication.#include"stdafx.h"#include"RouteTrace.h"#include"RouteTraceDlg.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CRouteTraceAppBEGIN_MESSAGE_MAP(CRouteTraceApp,CWinApp)//{{AFX_MSG_MAP(CRouteTraceApp)//NOTE-theClassWizardwilladdandremovemappingmacroshere.//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!//}}AFX_MSGON_COMMAND(ID_HELP,CWinApp::OnHelp)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CRouteTraceAppconstructionCRouteTraceApp::CRouteTraceApp(){//TODO:addconstructioncodehere,//PlaceallsignificantinitializationinInitInstance}///////////////////////////////////////////////////////////////////////////////TheoneandonlyCRouteTraceAppobjectCRouteTraceApptheApp;///////////////////////////////////////////////////////////////////////////////CRouteTraceAppinitializationBOOLCRouteTraceApp::InitInstance(){AfxEnableControlContainer();//Standardinitialization//Ifyouarenotusingthesefeaturesandwishtoreducethesize//ofyourfinalexecutable,youshouldremovefromthefollowing//thespecificinitializationroutinesyoudonotneed.#ifdef_AFXDLLEnable3dControls(); //CallthiswhenusingMFCinasharedDLL#elseEnable3dControlsStatic();//CallthiswhenlinkingtoMFCstatically#endifCRouteTraceDlgdlg;m_pMainWnd=&dlg;intnResponse=dlg.DoModal();if(nResponse==IDOK){//TODO:Placecodeheretohandlewhenthedialogis//dismissedwithOK}elseif(nResponse==IDCANCEL){//TODO:Placecodeheretohandlewhenthedialogis//dismissedwithCancel}//Sincethedialoghasbeenclosed,returnFALSEsothatweexitthe//application,ratherthanstarttheapplication'smessagepump.returnFALSE;}源代碼:ICMRcpp//ICMP.cpp:implementationoftheCICMPclass.#include"stdafx.h"#include"RouteTrace.h"#include"ICMP.h"#include"ws2tcpip.h"#ifdef_DEBUG#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#definenewDEBUG_NEW#endif////////////////////////////////////////////////////////////////////////Construction/Destruction//////////////////////////////////////////////////////////////////////CICMP::CICMP(){winsock=0;m_pIp=NULL;m_pIcmp=NULL;m_pIp=(IP_HEAD*)newBYTE[MAX_PACKET];m_pIcmp=(ICMP_HEAD*)newBYTE[MAX_PACKET];}CICMP::~CICMP(){delete[]m_pIp;delete[]m_pIcmp;}BOOLCICMP::Initialize(){WSADATAwsadata;if(WSAStartup(MAKEWORD(2,1),&wsadata)){ AfxMessageBox("WSAStartup初始化失敗!");returnFALSE;}winsock=WSASocket(AF_INET,//建立socketSOCK_RAW,IPPROTO_ICMP,NULL,0,0);if(!winsock){AfxMessageBox("Socket創(chuàng)建失敗!");returnFALSE;}inttimeout=5000;setsockopt(winsock,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,//設(shè)置接收超時sizeof(timeout));timeout=5000;setsockopt(winsock,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout, //設(shè)置發(fā)送超時sizeof(timeout));returnTRUE;}voidCICMP::Uninitialize() //釋放Socket{if(winsock)closesocket(winsock);WSACleanup();}USHORTCICMP::CheckSum(USHORT*buffer,intsize)//計算校驗(yàn)和{unsignedlongcksum=0;while(size>1){cksum+=*buffer++;size-=sizeof(USHORT);}if(size){cksum+=*(UCHAR*)buffer;}cksum=(cksum>>16)+(cksum&0xffff);cksum+=(cksum>>16);return(USHORT)(~cksum);}BOOLCICMP::SendICMPPack(char*pAddr){sockaddr_insockAddr;memset((void*)&sockAddr,0,sizeof(sockAddr));sockAddr.sin_family=AF_INET;sockAddr.sin_port=0;sockAddr.sin_addr.S_un.S_addr=inet_addr(pAddr);returnSendICMPPack(&sockAddr);}// 設(shè)置TTL intCICMP::SetTTL(intTTL){intnRet=setsockopt(winsock,IPPROTO_IP,IP_TTL,(LPSTR)&TTL,sizeof(int));if(nRet==SOCKET_ERROR){ CStringttlerr;ttlerr?Format(‘設(shè)置TTL錯誤!");AfxMessageBox(ttlerr);return0;}return1;}// 發(fā)送 BOOLCICMP::SendICMPPack(sockaddr_in*pAddr){//填充ICMP數(shù)據(jù)各項(xiàng)intstate;char*p_data;m_pIcmp->type=ICMP_ECHO;m_pIcmp->code=0;m_pIcmp->ID=(USHORT)GetCurrentProcessId();m_pIcmp->number=0;m_pIcmp->time=GetTickCount();m_pIcmp->cksum=0;//填充數(shù)據(jù)p_data=((char*)m_pIcmp+sizeof(ICMP_HEAD));memset((char*)p_data,'0',DEF_PACKET);//檢查和m_pIcmp->cksum=CheckSum((USHORT*)m_pIcmp,DEF_PACKET+sizeof(ICMP_HEAD));//發(fā)送數(shù)據(jù)state=sendto(winsock,(char*)m_pIcmp,DEF_PACKET+sizeof(ICMP_HEAD),NULL,(structsockaddr*)pAddr,sizeof(sockaddr));if(state==SOCKET_ERROR){if(GetLastError()==WSAETIMEDOUT)m_strInfo="連接超時!(發(fā)送)";elsem_strInfo="出現(xiàn)未知發(fā)送錯誤!";returnFALSE;}if(state<DEF_PACKET){m_strInfo="發(fā)送數(shù)據(jù)錯誤!";returnFALSE;}memcpy((void*)&m_sockAddr,(void*)pAddr,sizeof(sockaddr_in));returnTRUE;}// 接收數(shù)據(jù) BOOLCICMP::RecvICMPPack(){intstate;intlen=sizeof(sockaddr_in);char*addr;structhostent*lpHostent=NULL;intMaxfd=1;//監(jiān)視的最大的文件描述符值+1fd_setreadFdSet;//設(shè)置文件描述符structtimevalTimeout;addr=inet_ntoa(m_sockAddr.sin_addr);FD_ZERO(&readFdSet);FD_SET(winsock,&readFdSet);Maxfd=max(Maxfd,winsock)+1;Timeout.tv_sec=10;//設(shè)置響應(yīng)時間限制Timeout.tv_usec=0;inte=::select(Maxfd,&readFdSet,NULL,NULL,&Timeout);//獲取多路復(fù)用套接字的響應(yīng)結(jié)果if(e<=0){routeaddr="****";routestate=1;RouteState="超時未知";returnFALSE;if(!FD_ISSET(winsock,&readFdSet))returnFALSE;state=recvfrom(winsock,(char*)m_pIp,MAX_PACKET,0,(structsockaddr*)&m_sockAddr,&len);if(state==SOCKET_ERROR){if(WSAGetLastError()==WSAETIMEDOUT){m_strInfo.Format("接收超時,路由跟蹤失敗!");routestate=0;RouteState="路由跟蹤失敗!";}elsem_strInfo="未知接收錯誤!";returnFALSE;}//分析數(shù)據(jù)intipheadlen;ipheadlen=m_pIp->HeadLen*4;if(state<(ipheadlen+MIN_PACKET)){m_strInfo="目的地址的響應(yīng)數(shù)據(jù)不正確";returnFALSE;}ICMP_HEAD*p_icmprev;p_icmprev=(ICMP_HEAD*)((char*)m_pIp+ipheadlen);switch(p_icmprev->type){caseICMP_ECHOREPLY://收到正?;仫@{m_strInfo.Format("接收到%s%d字節(jié)響應(yīng)數(shù)據(jù),響應(yīng)時間:%dms?",inet_ntoa(m_sockAddr.sin_addr),len,GetTickCount()-p_icmprev->time);routeaddr=addr;routestate=0;RouteState="到達(dá)目的主機(jī)!";returnTRUE;break;}caseICMP_TTLOUT:〃TTL超時{routeaddr=inet_ntoa(m_sockAddr?sin_addr);routestate=1;RouteState="測試到路由器!";returnTRUE;break;}caseICMP_DESUNREACH://目的不可達(dá){m_strInfo="目的不可達(dá)!";routestate=0;RouteState="目的不可達(dá)";returnTRUE;break;
default:{routestate=0;routeaddr="***";m_strInfo="未知錯誤!";RouteState="不明狀態(tài)!";}}returnTRUE;}2、命令行窗口下運(yùn)行:tracert命令,記錄運(yùn)行結(jié)果和網(wǎng)站IP地址。dq:\Timj01S\systea.32^CBd?ezehicvcsoftUindou?XP 5.1.2660]<C>版取祈有1985-2001MicioooftCorp.SDocurientsandSettIngsMhduiinIstrator>tFaceFtww?丄石3?coiloneramaximumof39hops:1<1ns<1ms<1ms2oneramaximumof39hops:1<1ns<1ms<1ms2<1ns<1ms<1tins.13<1ns<1ms<1nsd<1ms<1ms262.112.G.E5rms<1ms<1ms0G1R13:7ms7PiS071ns1msims丄1?1ns1ms丫ms112.41.17891ns1ms1ms82te***Requesttimedout.it***Reuuesttimedout.121ns1ms1ms162.105.2B.233[IpacecompleteaTracingI'onteto163.xdwscache.glhB?I[162.105.28?2333C;SDociinientsandSetl^iriigrsM^dniinistri<i1;uri>險歌拼咅半;接收到1迄接收到1迄105.2S.233出字節(jié)響應(yīng)數(shù)據(jù),響應(yīng)時間:口佔(zhàn).目的地址|1S2.105.2B.233 三|壘丈眺數(shù)『蹶二劇壘丈眺數(shù)路由器地址162.105.28.233
****202.
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025服裝連鎖加盟合同樣本
- 2025海上運(yùn)輸合同模板書
- 二零二五年度車輛轉(zhuǎn)讓與道路救援服務(wù)合同3篇
- 二零二五年度股權(quán)投資公司股東合作協(xié)議3篇
- 二零二五年度文化產(chǎn)業(yè)發(fā)展全新期權(quán)合同3篇
- 2025年度養(yǎng)羊產(chǎn)業(yè)人才培養(yǎng)與交流合作協(xié)議3篇
- 二零二五年度生態(tài)保護(hù)公益合作合同3篇
- 2025年度虛擬現(xiàn)實(shí)合伙人股權(quán)分配與內(nèi)容開發(fā)合同3篇
- 二零二五年度生態(tài)農(nóng)業(yè)用地農(nóng)村房屋買賣合同協(xié)議書
- 2025年度農(nóng)村自建房包工與智能安防系統(tǒng)安裝合同
- 3、心電圖檢查質(zhì)量控制(操作標(biāo)準(zhǔn)化)要求
- 腎病科腎病綜合征診療規(guī)范2023版
- 高考作文模擬寫作訓(xùn)練:一個熟悉的勞動者
- 電商稅收合規(guī)問題
- 鐵路行車規(guī)章
- 污水處理廠有毒有害氣體檢測記錄表
- 馬克思主義與社會科學(xué)方法論課后思考題答案全
- 針灸推拿習(xí)題庫+參考答案
- 淺析巖溶地區(qū)工程地質(zhì)勘察手段及應(yīng)用
- 2023-2024學(xué)年六年級上期末數(shù)學(xué)考試試卷附答案解析
- 羅伊模式個案護(hù)理
評論
0/150
提交評論