![traceroute程序設(shè)計與實現(xiàn)_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/21/e571161b-bc78-4425-af91-4e400a0932ba/e571161b-bc78-4425-af91-4e400a0932ba1.gif)
![traceroute程序設(shè)計與實現(xiàn)_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/21/e571161b-bc78-4425-af91-4e400a0932ba/e571161b-bc78-4425-af91-4e400a0932ba2.gif)
![traceroute程序設(shè)計與實現(xiàn)_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/21/e571161b-bc78-4425-af91-4e400a0932ba/e571161b-bc78-4425-af91-4e400a0932ba3.gif)
![traceroute程序設(shè)計與實現(xiàn)_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/21/e571161b-bc78-4425-af91-4e400a0932ba/e571161b-bc78-4425-af91-4e400a0932ba4.gif)
![traceroute程序設(shè)計與實現(xiàn)_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-5/21/e571161b-bc78-4425-af91-4e400a0932ba/e571161b-bc78-4425-af91-4e400a0932ba5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、traceroute程序設(shè)計 與實現(xiàn) Traceroute程序設(shè)計與實現(xiàn) 學生姓名:樊冠宇 指導老師二姜文超 摘要本文主要講述了路山追蹤的基本程序設(shè)計與實現(xiàn),并給出了一種基 于IP網(wǎng)絡(luò)的路III追蹤命令Tracert,詳細分析了實現(xiàn)路山追蹤的基本原理,歸納了 路由追蹤的基本流程。Tracert通過ICMP協(xié)議和I P header中T T L (存活時 間)利用路山器對數(shù)據(jù)報存活時間的處理方式來實現(xiàn)路山探測的。首先根據(jù)任 務(wù)書設(shè)計好流程圖,然后編寫程序代碼,運行得到Traceroute的命令窗口。提取 tracert的輸出,再結(jié)合現(xiàn)有IP數(shù)據(jù)庫及自建地名-坐標數(shù)據(jù)庫對路山中各節(jié)點IP進 行定位
2、,最終實現(xiàn)了動態(tài)顯示追蹤的詳細信息和路徑。 關(guān)鍵詞:IP地址,ICMP協(xié)議,TTL, Tracert路由追蹤 Internet,是LI前世界上最大的訃算機網(wǎng)絡(luò),更確切的說是網(wǎng)絡(luò)中的網(wǎng)絡(luò),它 山遍布全球的兒萬局域網(wǎng)和數(shù)白萬臺訃算機組成,并通過用于異構(gòu)網(wǎng)絡(luò)的 TCP/IP協(xié)議進行網(wǎng)間通信?;ヂ?lián)網(wǎng)中,信息的傳送是通過網(wǎng)中許多段的傳輸介 質(zhì)和設(shè)備從一端到達另一端。每一個連接在Internet 的設(shè)備,如主機、路由 器、接入服務(wù)器等一般情況下都會有一個獨立的IP地址。通過Traceroute我們 可以知道信息從你的訃算機到互聯(lián)網(wǎng)另一端的主機是走的什么路勁。當然每次 數(shù)據(jù)包山某一同樣的出發(fā)點到達某一同樣的
3、LI的地走的路勁可能會不同,但基 本上來說大部分時候所走的路由是相同的。隨著Internet (國際互聯(lián)網(wǎng))的發(fā) 展,越來越多的服務(wù)通過網(wǎng)絡(luò)提供給大眾,與此同時,針對互聯(lián)網(wǎng)的攻擊事件 也越來越頻繁。所謂路山追蹤實際上就是在IP網(wǎng)絡(luò)上判斷從源到達LI的所經(jīng)過 的路山器的IP地址,其基本的實現(xiàn)手段都是向口的地發(fā)送數(shù)據(jù)包以獲取經(jīng)過的 路由器的IP。山于Internet 的路山協(xié)議是動態(tài)的,所以每次形成的數(shù)據(jù)包從 同一個出發(fā)點到達目的地的路由可能會不一樣,但由于路由算法有一定的穩(wěn)定 性,在大部分時侯所走的路山會是相同的。 課程設(shè)計目的 1. 這次課程設(shè)汁,主要為了加深同學們對計算機網(wǎng)絡(luò)網(wǎng)絡(luò)的理解和認識
4、 2. 了解信息在計算機網(wǎng)絡(luò)與網(wǎng)絡(luò)之間的傳送和接收 3. 進一步加深了解網(wǎng)絡(luò)與網(wǎng)絡(luò)之間的協(xié)議 4. 理解網(wǎng)絡(luò)中的IP地址以及路山之間的相關(guān)命令。 課程設(shè)計內(nèi)容 1 .已知參數(shù):輸入:目的節(jié)點IP地址或主機名;輸出:從控制臺屏幕輸出IP報 文山本機出發(fā)到達LI的主機所經(jīng)過的路山信息。 2.設(shè)計要求:通過原始套接字編程,實現(xiàn)Tracert的基本功能 初始化Windows Sockets網(wǎng)絡(luò)環(huán)境; 解析命令行參數(shù),構(gòu)造U的端socket地址; 定義IP、ICMP報文; 接收ICMP差錯報文并進行解析。 課程設(shè)計要求 (1)按要求編寫課程設(shè)訃報告書,能正確闡述設(shè)訃結(jié)果。 (2)通過課程設(shè)計培養(yǎng)學生嚴謹
5、的科學態(tài)度,認真的工作作風和團隊協(xié)作精 神。 (3)學會文獻檢索的基本方法和綜合運用文獻的能力。 (4)在老師的指導下,要求每個學生獨立完成課程設(shè)計的全部內(nèi)容。 2設(shè)計原理 raceroute是一個路由跟蹤命令,它通過ICMP協(xié)議和I P header中T T L (存活時間)來實現(xiàn)的。具體而言就是:發(fā)送方發(fā)出一個TTL是I的IP Datagram (事實上每個數(shù)據(jù)包發(fā)送三次,大小為40字節(jié),包括本機的IP地 址,目的主機的IP地址以及時間戳),當經(jīng)由第一個路曲器時,路由器將該數(shù) 據(jù)包的TTL減1,發(fā)現(xiàn)此時的TTL為0,將數(shù)據(jù)包丟失,同時向源主機發(fā)送一個 ICMPTime-to-Exceed報
6、文(包括源主機的IP地址、路由地址以及路由的相關(guān)消 息),源主機收到這個數(shù)據(jù)包后就知道了這個路由器在這條路徑上。同理發(fā)送 第二個、第三個.第n個。源主機將每次I P數(shù)據(jù)報的TTL+ 1 ,直到某個 數(shù)據(jù)報到達了目的地址,此時不知發(fā)回一個I CMP T i me- t o-E x c e e d ,而是發(fā)送一個數(shù)據(jù)報的響應(yīng)報文。當源主機收到這樣一個報文后便 知道數(shù)據(jù)包已經(jīng)到達了口的地。Traceroute提取發(fā)ICMPTTL到期消息設(shè)備的IP 地址并作域名解析。每次,Traceroute都打印出一系列數(shù)據(jù),包括所經(jīng)過的路由 設(shè)備的域名及IP地址,三個包每次來回所花時間。Traceroute有一個
7、固定的時間 等待響應(yīng)(ICMPTTL到期消息)。如果這個時間過了,它將打印出一系列的*號表 明:在這個路徑上,這個設(shè)備不能在給定的時間內(nèi)發(fā)出ICMPTTL到期消息的響 應(yīng)。然后,Traceroute給TTL記數(shù)器加1,繼續(xù)進行。 簡介和基本原理 ICMPflnternet Control Message Protocol),B卩 Internet 控制報文協(xié)議,它是 TCP/IP協(xié)議族的一個子協(xié)議”屬于網(wǎng)絡(luò)層面向無連接的協(xié)議,主要用于在主機與 路山器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態(tài)信息等。當遇到 IP數(shù)據(jù)無法訪問U標、IP路山器無法按肖前的傳輸速率轉(zhuǎn)發(fā)數(shù)據(jù)包等情況時, 會自動
8、發(fā)送ICMP消息。ICMP報文被包裝成IP數(shù)據(jù)包傳到數(shù)據(jù)鏈路層進行傳 輸。通過ICMP協(xié)議,主機和路由器可以報告錯誤并交換相關(guān)的狀態(tài)信息。 ICMP對于TCP/IP協(xié)議的可靠運行是至關(guān)重要的。ICMP報文結(jié)構(gòu)如圖1所示: p7815 1631 位類型|8位代碼 |16位校驗和 (不同類型和代碼有不同的內(nèi)容) 圖1 ICMP報文結(jié)構(gòu) 程序的基本原理 路山追蹤的主要原理是根據(jù)路徑上各路山器對數(shù)據(jù)報的存活時仃imeto Live, TTL)做不同的處理,使其產(chǎn)主超時ICMP消息響應(yīng),反饋至源主機從而獲得 此跳路由器或主機的IP。照此再發(fā)送下一個TTL經(jīng)過自增的數(shù)據(jù)報,直至獲得整 個路由中各節(jié)點的IP
9、或者接收到錯誤的消息。詳細過程描述如下: 1)置n =假設(shè)該過程中共經(jīng)過M個路曲器。 2)源主機S向口標主機D發(fā)送一個TTL為n的UDP數(shù)據(jù)報。并設(shè)定端口號 (一般大于30 000)。 3)路曲器(或者網(wǎng)關(guān)、主機)Rn對接收到的數(shù)據(jù)報的TTL值n做減1處理。 4)若n = 0,則丟棄UDP數(shù)據(jù)報,向源主機S發(fā)送ICMP超時報文。 5)若n$l,繼續(xù)向LI標主機D發(fā)送經(jīng)過處理的數(shù)據(jù)報。 6)源主機S分析返回的ICMP報文,從中提取出發(fā)送者Rn的地址IPn并做記 錄。 7) 若收到“端口不可達”的ICMP報文,則發(fā)送方即H標主機D,記錄其地址 IPn,追蹤完成。 8) 置n = n +1,繼續(xù)向目
10、標主機D發(fā)送TTL為n的數(shù)據(jù)報。 注意,這里使UDP數(shù)據(jù)報的端口號大于30000,是因為一般的應(yīng)用程序不可能 使用如此高的端口號。當然這并非絕對,若出現(xiàn)例外,則源主機會發(fā)現(xiàn)等待超時, 于是隨機改變此UDP數(shù)據(jù)報的端口號,再次發(fā)送。這樣最終可以在標主機上找 到一個空閑的端口號。另外,這里假設(shè)路由器和U標主機沒有被配置為“過濾 ICMP”或者做了其他的非常規(guī)處理,如果被做了類似的配置,則上面的追蹤機制 就無能為力了。 實現(xiàn)的功能 IP數(shù)據(jù)報的首部山兩部分構(gòu)成:固定部分和可變部分。固定部分的長度是 20個字段,可變部分由許多選項構(gòu)成,最長可達40個字節(jié)。雖然選項并不是 IP數(shù)據(jù)報的必需部分,但選項的
11、處理卻是IP軟件的必需部分。 在現(xiàn)在的TCP/IP協(xié)議中,只定義了六種選項,對于我們進行路由追蹤技術(shù) 有用的是記錄路山選項,一個記錄路山選項是用來記錄處理IP數(shù)據(jù)報的互聯(lián)網(wǎng) 路由器的IP地址。因為首部的最大長度是60個字節(jié),它包括20個字節(jié)的基本 首部。這就意味著只剩下40個字節(jié)留下給選項部分,所以通過選項字段最多能 夠記錄9個路山器的IP地址。源站在選項中創(chuàng)建一個位標置(placeholder),用 來填入所經(jīng)過的各路III器,圖2給出了記錄路山選項的格式。 向目的主機發(fā)送一個ICMP報文,這種方法只要求使用一個套接字。ICMP即 Internet控制報文協(xié)議,是一種用于特殊用途的報文機制,
12、可以使互聯(lián)網(wǎng)中的路 山器或主機報告差錯或提供有關(guān)意外情況的信息。盡管UDP和ICMP工作在 TCP/IP的不同層次上,但他們的封裝是類似的。ICMP報文為兩級封裝ICMP報文 放在IP數(shù)據(jù)報的數(shù)據(jù)部分,數(shù)據(jù)報則放在幀的數(shù)據(jù)中進行網(wǎng)絡(luò)傳輸(如圖3所 示)ICMP報文與其他普通報文一樣,具有相同的路山選擇,并沒有特殊的優(yōu)先 權(quán)和增加可黑性。通過路III選項的方法記錄路山的實現(xiàn)同UDP數(shù)據(jù)報是相似 的,這里主要說明通過TTL方法的實現(xiàn)。 分析本次課程設(shè)計的任務(wù)書,整個課程設(shè)計的過程大致可以分為三個步 驟:第一步主要是設(shè)訃好流程圖;笫二步是根據(jù)流程圖編寫程序代碼;笫三步 是在程序編譯通過后,運行程序結(jié)
13、果,在對話框中輸入要追蹤的IP地址,觀察 路111追蹤命令追蹤IP地址在網(wǎng)絡(luò)中的運行。其中第一步跟第二步是關(guān)鍵,只有 完整的流程圖和根據(jù)要求編寫好正確的程序,才能運行得到正確的結(jié)果。下面 是整個設(shè)計過程中各個步驟的詳細分析。 流程圖 根據(jù)要求設(shè)計好的流程圖如圖4所示: 圖4流程圖 的核心程序 整個設(shè)訃過程的核心程序代碼: include ,u, include include include #訐 def _DEBUG #undefTHIS_FILE static char THIS_FILE=_FILE_; #define new DEBUG.NEW #endif void CPing:Pi
14、ng(int timeout) m_hSocket = WSASocket (AFJNET, SOCK_RAWZ IPPROT0CMP, NULL, 0,WSA_FLAG_OVERLAPPED); 訐(m_hSocket = INVALID_SOCKET) AfxMessageBox(socket 創(chuàng)建失敗! return ; Start sending/receiving ICMP packets 開始發(fā)送/接收 ICMP 的數(shù)據(jù)包 拴TraceRoute 路由跟喘 |www. sina. com| 跟蹤報告 #define new DEBUG_NEW #end 訐 llllllllllll
15、llllllllllllllllllllllllllllllllllllllllllllllllllllllllll / Construction/Destruction llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll /IP struct IPHEADER unsigned int hen:4;/ 首部長度 unsigned int version:4; / 版本 unsigned char tos; 服務(wù)類型 unsigned short total_len; 報文總長度 unsigned sho
16、rt ident; /標識 unsigned short frag_and_flags; 偏移量 unsigned char ttl; 壽命 unsigned char proto; 協(xié)議 unsigned short checksum;首部校驗和 unsigned int sourcelP; 源站IP unsigned int destIP; /目的站IP ; /ICMP首部數(shù)據(jù)結(jié)構(gòu) struct ICMPHEADER BYTE Ltype;類型 BYTE Lcode;代碼 USHORT i_cksum; USHORT ijd; USHORT Lseq; ULONG timestamp; ;
17、 首部校驗和 /標識 序列號 時間戳(選用) CTracer:CTracer() Seq=l; icmpData=NULL; icmpRcvBuf=NULL; m_hSocket=INVALID_SOCKET; 初始化socket WSADATA wsaData; if(WSAStartup(MAKEWORD(2,2)/ CT racer: :CT racer() 關(guān)閉 Socket 訐(m_hSocket!=NULL) closesocket(m_hSocket); WSACIeanup(); /Checksum USHORT CTracer:CheckSum(char* pBuffer,i
18、nt size) USHORT* buffer=(USHORT*)pBuffer; unsigned long cksum=O; while(size 1) cksum += *buffer+; size -= sizeof(USHORT); 訐(size ) cksum += *(UCHAR*)buffer; cksum = (cksum 16) + (cksum cksum += (cksum 16); return (USHORT)(cksum); /FillAddress BOOL CTracer:FillAddress(char *addrDest) memset( =AFJNET;
19、 if(in et_addr(addrDest)=INADDR_NONE) - 輸入的地址為計算機名字 HOSTENT* hp=NULL; hp=gethostbyname(addrDest); if(hp) memcpy( =hp-h_addrtype; else AfxMessageBox(n 獲取地址失敗! ”); return FALSE; else return TRUE; /FilllCMPData void CTracer:FilllCMPData(char* icmpDatajnt size) memset(icmpData,O,size); ICMPHEADER* icmpH
20、eader=NULL; icmpHeader=(ICMPHEADER*)icmpData; icmpHeader-i_type =ICMP_ECHO; icmpHeader-i_code =0; icmpHeader-i_id =(USHORT)GetCurrentProcessld(); icmpHeader-i_seq =m_n Seq+; /GetTickCoun?返回從一0點到現(xiàn)在的毫秒數(shù),作時間戳 icmpHeader-timestamp=GetTickCount(); char* datapart=icmpData+sizeof(ICMPHEADER); memset(datapa
21、rt,*,/size-sizeof(ICMPHEADER); 填充校驗和 icmpHeader-i_cksum =CheckSum(icmpData,size); 設(shè)置數(shù)據(jù)報的壽命 BOOL CTracer:SetTTL(SOCKET hSocket, int ttl) int result; resu It=setsockopt( hSocket, IPPROTOPP_TTL,(LPSTR) if(result=SOCKET_ERROR) AfxMessageBox(i5置數(shù)據(jù)報壽命失敗! ”); TerminateProcess(GetCurre ntProcessOJ); return
22、TRUE; 發(fā)送數(shù)據(jù)報 BOOL CTracer:SendData(char* icmpDataJnt size) 填充ICMP報頭 FilllCMPData(icmpData,size); 發(fā)送數(shù)據(jù)報 int result; timel=GetTickCount(); result=sendto(m_hSocket/icmpData/size,0/(SOCKADDR*) if(result=SOCKET_ERROR) if(WSAGetLastError()=WSAETIMEDOUT) (CTraceRouteDlg*)m_pWnd)-lnfoAdd (發(fā)送超時冷; return TRUE;
23、 AfxMessageBoxf發(fā)送報文失敗!); TerminateProcessfGetCurr en tProcess()d return FALSE; 接收數(shù)據(jù)報 BOOL CTracer:RecvData(char* icmpRcvBuf,int* presuit) static int count=0; 總共6次出現(xiàn)接收超時,判斷存在連接問題。 if(count5) AfxMessageBox(n 連接存在問題!”); TerminateProcessfGetCurr en tProcess()l); int fromlen=sizeof(SOCKADDR); *presult=SO
24、CKET_ERROR; *presult=recvfrom(m_hSocket,icmpRcvBuf,MAX_PACKET/0,(SOCKADDR*) time2=GetTickCount(); 訐(*presult=SOCKET_ERROR) if(WSAGetLastError()=WSAETIMEDOUT) (CTraceRouteDlg*)m_pWnd)-lnfoAdd (接收超時!); cou nt+; return TRUE; AfxMessageBox(u接收數(shù)據(jù)報失敗!); TerminateProcessfGetCurre ntProcess()廣 1); return FA
25、LSE; 處理接收到的數(shù)據(jù)報 BOOL CTracer:DecodelCMP(char* pBufferJnt bytes,int ttl) IPHEADER *ipHeader=NULL; ICMPHEADER *icmpHeader=NULL; unsigned short ipHeaderLen; HOSTENT *ph=NULL; in_addr inaddr=; ipHeader=(IPHEADER*)pBuffer; ipHeaderLe n=20; 訐(bytesi_type) 目的站點的返回 case ICMP_ECHOREPLY: ph=gethostbyaddr(const
26、 char *) 訐(ph !=NULL) CString report; (%2d %s (%s),/ttl,ph-h_name/inet_ntoa(inaddr); (CTraceRouteDlg*)m_pW nd)lnfoAdd(report); _ return TRUE; break; 中途路由器的返回 case ICMP_TIMEOUT: CString report; (%2d %s %2d msttl, inet_ntoa(inaddr),(time2- timel); (CTraceRouteDlg*)m_pW nd)lnfoAdd(report); return FALSE
27、; break; 錯誤:主機不可達 case ICMP_DESTUNREACH: CString report; (%2d %s 主機不可達,ttlzinet_ntoa(inaddr); (CTraceRouteDlg*)m_pW nd)-lnfoAdd(report); return TRUE; break; 收到一個不是回應(yīng)的報文 default: L CString report; (非回應(yīng)報文”); (CTraceRouteDlg*)m_pW nd)lnfoAdd(report); return TRUE; return FALSE; void CTracer:SetWnd(CDial
28、og *pWnd) i殳置窗口指針 m_pWnd=pWnd; _ void CTracer:Trace(char *destAddress) int size二DEF_PACKET_SIZE+sizeof(ICMPHEADER); 轉(zhuǎn)換地址 訐(!FillAddress(destAddress) return ; 分配必要的內(nèi)存空間 icmpData=(char*)HeapAlloc(GetProcessHeap()/HEAP_ZERO_MEMORY,MAX_PACKET); icmpRcvBuf=(char*)HeapAlloc(GetProcessHeap()/HEAP_ZERO_MEMORY,MAX_PACK ET); if(!icmpData | | licmpRcvBuf) AfxMessageBox(分配內(nèi)存空間失敗!*); TerminateProcesstGetCurrentProcessO,-!); memset(icmpData,O,l/IAX_PACKET); memset(icmpRcvBuf,O,MAX_PACKET); 初始化套接字 m_hSocket=WSASocket(AFJNET,SOCK_RAW,IP
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度文化旅游項目開發(fā)合同范本-@-1
- 2025年度貨架品牌授權(quán)與營銷合作合同
- 2025年度進出口貿(mào)易合同履行中的社會責任與倫理規(guī)范
- 2025年度網(wǎng)絡(luò)安全防護合同變更應(yīng)對策略范本
- 2025年度公園土地租賃合同范本(含租賃期滿處理)
- 2025年度舊車檢測與質(zhì)量保證合同樣本
- 2025年度新型住宅小區(qū)物業(yè)服務(wù)外包合同
- 2025年度綠色節(jié)能空調(diào)銷售及安裝一體化服務(wù)合同
- 2025年度精裝修商業(yè)地產(chǎn)購置定金合同
- 2025年度股權(quán)代持專項資產(chǎn)管理合同
- 發(fā)生輸液反應(yīng)時的應(yīng)急預案及處理方法課件
- 中國旅游地理(高職)全套教學課件
- 數(shù)字貨幣的匿名性與反洗錢
- 門脈高壓性消化道出血的介入治療課件
- 民航保密培訓課件
- 兒童尿道黏膜脫垂介紹演示培訓課件
- 詩詞寫作入門
- 學校教育中的STEM教育模式培訓課件
- 電器整機新產(chǎn)品設(shè)計DFM檢查表范例
- 樁基礎(chǔ)工程文件歸檔內(nèi)容及順序表
- 不同產(chǎn)地半夏總生物堿含量測定
評論
0/150
提交評論