traceroute程序设计及实现

上传人:公**** 文档编号:559511995 上传时间:2023-02-04 格式:DOC 页数:19 大小:119.50KB
返回 下载 相关 举报
traceroute程序设计及实现_第1页
第1页 / 共19页
traceroute程序设计及实现_第2页
第2页 / 共19页
traceroute程序设计及实现_第3页
第3页 / 共19页
traceroute程序设计及实现_第4页
第4页 / 共19页
traceroute程序设计及实现_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《traceroute程序设计及实现》由会员分享,可在线阅读,更多相关《traceroute程序设计及实现(19页珍藏版)》请在金锄头文库上搜索。

1、.Traceroute程序设计与实现学生: 樊冠宇 指导老师:文超摘 要 本文主要讲述了路由追踪的基本程序设计与实现,并给出了一种基于IP网络的路由追踪命令Tracert,详细分析了实现路由追踪的基本原理,归纳了路由追踪的基本流程。Tracert通过ICMP协议和 header中存活时间利用路由器对数据报存活时间的处理方式来实现路由探测的。首先根据任务书设计好流程图,然后编写程序代码,运行得到Traceroute的命令窗口。提取tracert的输出,再结合现有IP数据库及自建地名- 坐标数据库对路由中各节点IP进行定位,最终实现了动态显示追踪的详细信息和路径。关键词:IP 地址,ICMP协议,

2、TTL,Tracert路由追踪1 引 言Internet,是目前世界上最大的计算机网络,更确切的说是网络中的网络,它由遍布全球的几万局域网和数百万台计算机组成,并通过用于异构网络的TCP/IP协议进行网间通信。互联网中,信息的传送是通过网中许多段的传输介质和设备从一端到达另一端。每一个连接在Internet上的设备,如主机、路由器、接入服务器等一般情况下都会有一个独立的IP地址。通过Traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路劲。当然每次数据包由某一同样的出发点到达某一同样的目的地走的路劲可能会不同,但基本上来说大部分时候所走的路由是相同的。随着Intern

3、et国际互联网的发展,越来越多的服务通过网络提供给大众,与此同时,针对互联网的攻击事件也越来越频繁。所谓路由追踪实际上就是在IP网络上判断从源到达目的所经过的路由器的IP地址,其基本的实现手段都是向目的地发送数据包以获取经过的路由器的IP。由于Internet上的路由协议是动态的,所以每次形成的数据包从同一个出发点到达目的地的路由可能会不一样,但由于路由算法有一定的稳定性,在大部分时侯所走的路由会是相同的。1.1 课程设计目的1.这次课程设计,主要为了加深同学们对计算机网络网络的理解和认识2.了解信息在计算机网络与网络之间的传送和接收3.进一步加深了解网络与网络之间的协议4.理解网络中的IP地

4、址以及路由之间的相关命令。1.2 课程设计容1.参数:输入:目的节点IP地址或主机名;输出:从控制台屏幕输出IP报文由本机出发到达目的主机所经过的路由信息。2.设计要求:通过原始套接字编程,实现Tracert的基本功能2.1初始化Windows Sockets网络环境;2.2解析命令行参数,构造目的端socket地址;2.3定义IP、ICMP报文;2.4接收ICMP差错报文并进行解析。1.3课程设计要求1按要求编写课程设计报告书,能正确阐述设计结果。2通过课程设计培养学生严谨的科学态度,认真的工作作风和团队协作精神。3学会文献检索的基本方法和综合运用文献的能力。4在老师的指导下,要求每个学生独

5、立完成课程设计的全部容。2设计原理raceroute是一个路由跟踪命令,它通过ICMP协议和 header中存活时间来实现的。 具体而言就是:发送方发出一个是的IP Datagram 事实上每个数据包发送三次,大小为40字节,包括本机的IP 地址,目的主机的IP 地址以及时间戳,当经由第一个路由器时,路由器将该数据包的TTL减1,发现此时的TTL为0,将数据包丢失,同时向源主机发送一个ICMP Time-to-Exceed 报文包括源主机的IP 地址、路由地址以及路由的相关消息,源主机收到这个数据包后就知道了这个路由器在这条路径上。同理发送第二个、第三个.第n个。源主机将每次数据报的,直到某个

6、数据报到达了目的地址,此时不知发回一个,而是发送一个数据报的响应报文。当源主机收到这样一个报文后便知道数据包已经到达了目的地。Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。Traceroute 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号说明:在这个路径上,这个设备不能在给定的时间发出ICMP TTL到期消息的响应。然后,Traceroute给TTL记数器加1,继续进行。2.1ICMP简介和基本原理I

7、CMP(Internet Control Message Protocol),即Internet控制报文协议,它是TCP/IP协议族的一个子协议,属于网络层面向无连接的协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP报文被包装成IP数据包传到数据链路层进行传输。通过ICMP协议,主机和路由器可以报告错误并交换相关的状态信息。ICMP对于TCP/IP协议的可靠运行是至关重要的。ICMP报文结构如图1所示:2.2traceRoute程序的基本原理路由追

8、踪的主要原理是根据路径上各路由器对数据报的存活时(Time to Live,TTL)做不同的处理,使其产生超时ICMP消息响应,反馈至源主机,从而获得此跳路由器或主机的IP。照此再发送下一个TTL经过自增的数据报,直至获得整个路由中各节点的IP或者接收到错误的消息。详细过程描述如下:1) 置n = 1。假设该过程中共经过M个路由器。2) 源主机S向目标主机D发送一个TTL为n的UDP数据报。并设定端口号(一般大于30 000) 。3) 路由器(或者网关、主机) Rn 对接收到的数据报的TTL 值n做减1处理。4) 假设n = 0,那么丢弃UDP数据报,向源主机S发送ICMP超时报文。5) 假设

9、n 1,继续向目标主机D发送经过处理的数据报。6) 源主机S分析返回的ICMP报文, 从中提取出发送者Rn的地址IPn并做记录。7) 假设收到“端口不可达的ICMP报文,那么发送方即目标主机D,记录其地址IPn,追踪完成。8) 置n = n +1,继续向目标主机D发送TTL为n的数据报。注意,这里使UDP数据报的端口号大于30000,是因为一般的应用程序不可能使用如此高的端口号。当然这并非绝对,假设出现例外,那么源主机会发现等待超时,于是随机改变此UDP数据报的端口号,再次发送。这样最终可以在目标主机上找到一个空闲的端口号。另外,这里假设路由器和目标主机没有被配置为“过滤ICMP或者做了其他的

10、非常规处理,如果被做了类似的配置,那么上面的追踪机制就无能为力了。2.3traceRoute实现的功能IP数据报的首部由两部分构成:固定部分和可变部分。固定部分的长度是20个字段,可变部分由许多项选择项构成,最长可达40个字节。虽然选项并不是IP数据报的必需部分,但选项的处理却是IP软件的必需部分。在现在的TCP/IP协议中,只定义了六种选项,对于我们进行路由追踪技术有用的是记录路由选项,一个记录路由选项是用来记录处理IP数据报的互联网路由器的IP地址。因为首部的最大长度是60个字节,它包括20个字节的基本首部。这就意味着只剩下40个字节留下给选项部分,所以通过选项字段最多能够记录9个路由器的

11、IP地址。源站在选项中创建一个位标置placeholder,用来填入所经过的各路由器,图2给出了记录路由选项的格式。图2 记录路由选项向目的主机发送一个ICMP报文,这种方法只要求使用一个套接字。ICMP即Internet控制报文协议,是一种用于特殊用途的报文机制,可以使互联网中的路由器或主机报告差错或提供有关意外情况的信息。尽管UDP和ICMP工作在TCP/IP的不同层次上,但他们的封装是类似的。ICMP报文为两级封装ICMP报文放在IP数据报的数据部分,数据报那么放在帧的数据中进行网络传输如图3所示ICMP报文与其他普通报文一样,具有相同的路由选择,并没有特殊的优先权和增加可靠性。通过路由

12、选项的方法记录路由的实现同UDP数据报是相似的,这里主要说明通过TTL方法的实现。图3 ICMP报文的两级封装3设计步骤分析本次课程设计的任务书,整个课程设计的过程大致可以分为三个步骤:第一步主要是设计好流程图;第二步是根据流程图编写程序代码;第三步是在程序编译通过后,运行程序结果,在对话框中输入要追踪的IP地址,观察路由追踪命令追踪IP地址在网络中的运行。其中第一步跟第二步是关键,只有完整的流程图和根据要求编写好正确的程序,才能运行得到正确的结果。下面是整个设计过程中各个步骤的详细分析。3.1traceroute流程图根据要求设计好的流程图如图4所示:图4 流程图3.2traceroute的

13、核心程序整个设计过程的核心程序代码:#include stdafx.h#include MyPing.h#include Ping.h#include MyPingDlg.h#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE=_FILE_;#define new DEBUG_NEW#endifvoid CPing:Ping(int timeout) m_hSocket = WSASocket (AF_INET, SOCK_RAW, IPPROTO_ICMP, NULL, 0,WSA_FLAG_OVERLAPPED); if (m_hSocket

14、 = INVALID_SOCKET) AfxMessageBox(socket 创建失败!); return ;Start sending/receiving ICMP packets开始发送/接收ICMP的数据包/static int nCount = 0;静态的nCount = 0。int nCount=0; while(1) int bwrote;if (nCount+ = 4) break; (IcmpHeader*)icmp_data)-i_cksum = 0; (IcmpHeader*)icmp_data)-timestamp = GetTickCount(); (IcmpHead

15、er*)icmp_data)-i_seq = seq_no+; (IcmpHeader*)icmp_data)-i_cksum = checksum(USHORT*)icmp_data, datasize); bwrote = sendto(m_hSocket, icmp_data, datasize, 0, (struct sockaddr*)&m_addrDest, sizeof(m_addrDest); if (bwrote = SOCKET_ERROR) if (WSAGetLastError() = WSAETIMEDOUT) m_dlg-m_result+=Timed out ! rn;m_dlg-S

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号