收藏 分享(赏)

Tracert 程序设计报告.doc

上传人:精品资料 文档编号:8379388 上传时间:2019-06-23 格式:DOC 页数:11 大小:198KB
下载 相关 举报
Tracert 程序设计报告.doc_第1页
第1页 / 共11页
Tracert 程序设计报告.doc_第2页
第2页 / 共11页
Tracert 程序设计报告.doc_第3页
第3页 / 共11页
Tracert 程序设计报告.doc_第4页
第4页 / 共11页
Tracert 程序设计报告.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、1设计报告课 程 计算机网络 设计名称 Tracert 程序 专业班级 计科 112 同组人学号姓名 实验日期 指导教师 成 绩 年 月 日2一、设计目的和要求1、实验目的1.熟悉原始套接字编程。2.了解网络的结构。 3.了解网络传输底层协议。 4.熟悉掌握 ICMP 协议的工作原理和路由跟踪原理。5.掌握 vc6.0 下程序调试、运行的基本方法。 6.通过实验熟悉协议的应用。2、实验要求1、通过实验,可以使程序记录并显示了数据报从源端机器传送到目标机器的过程中所经过的路由器的 IP 地址,并且记录了数据报到达每个路由器所需要的时间。认真观察到达每个路由器的时间有什么区别,从而熟练掌握 tra

2、cert 的工作原理和 ICMP 报文协议。 2、当我们不能通过网络访问目的设备时,网络管理员就需要判断是哪里出了问题。问题不仅仅会出现在最终目的设备,也可能出现在转发数据包的中间路由器。二、设计说明(包括设计分析,系统运行环境,设计中的重点和难点,输入和输出输出条件等)路由是把信息从源穿过网络传递到目的地的行为,在传输过程中,遇到一系列的中间节点。这些中间节点构成了路由跟踪的依据。路由跟踪是在路由的基础上提出的问题,是利用路由跟踪实用程序于确定 IP 数据报访问目标所采取的路径。当我们不能通过网络访问目的设备时,网络运行者就需要判断是哪里出了问题。问题不仅仅会出现在最终目的设备,也可能出现在

3、转发数据包的中间路由器。解决方法是了解了 IP数据报访问目标所采取的路径,将发现网络布网简单拓扑,确定路由断点即可解决网络故障。操作系统中的 tracert 或 traceroute 路由跟踪程序,通过它可以查看到达目标地址所经过的路径。它的作用与 ping 有类似之处使用 ping 可以检查是否连接,如果不通,一般不好准确判断哪一个节点出错,而使用 tracert 则可以准确判断出错的部分。 系统实现路由的跟踪,每经过一个路由,要求得到经过该路由节点的地址,也就是说输入目标信息,可以得到本地主机到目标经过的所有中间节点。这些中间节点用IP 地址标识。并要求对跟踪跳数,每一跳等待时间可控。为了

4、让系统更加完善,首先要测试目标的连通性,系统中也要实现目标探测功能,即 Ping 功能。当数据报从你的计算机经过多个网关传送到目的地时,Tracert 命令可以用来跟踪数据报使用的路由(路径) 。该实用程序跟踪的路径是源计算机到目的地的一条路径,不能保证或认为数据报总遵循这个路径。Tracert 是一个运行得比较慢的命令(如果你指定的目标地址比较远) ,每个路由器你大约需要给它 15 秒钟。 Tracert 使用时只需要在 tracert 后面跟一个 IP 地址或 URL,Tracert 会进行相应的域名转换,Tracert 一般用来检测故障的位置,你可以用 tracert IP 在哪个环节上

5、出了问题,虽然还是没有确定是什么问题,但它已经告诉了我们问题所在的地方。3三、系统详细设计(包括程序流程、主要函数等)YNNYNY开始使用 UDP 协议创建原始 UDP 包目的主机回应答或达到最大跳站TTL+(初始值为1)填充 UDP 数据包并发送有数据报到达?有预期数据报?解析数据报并显示输出 超时,显示超时信息释放各种资源显示结果信息结束4四、程序源代码及注释#include #include #include #include #include “itracert.h“/int main(int argc, char* argv)/检查命令行参数if (argc != 2)cerr h_

6、addr).s_addr;/输出屏幕信息cout type = ICMP_ECHO_REQUEST;pIcmpHeader-code = 0;pIcmpHeader-id = (USHORT)GetCurrentProcessId();memset(IcmpSendBuf+sizeof(ICMP_HEADER), E, DEF_ICMP_DATA_SIZE);/开始探测路由DECODE_RESULT stDecodeResult;BOOL bReachDestHost = FALSE;USHORT usSeqNo = 0;int iTTL = 1;int iMaxHop = DEF_MAX_H

7、OP;while (!bReachDestHost /输出当前跳站数作为路由信息序号cout cksum = 0;(ICMP_HEADER*)IcmpSendBuf)-seq = htons(usSeqNo+);(ICMP_HEADER*)IcmpSendBuf)-cksum = 7GenerateChecksum(USHORT*)IcmpSendBuf, sizeof(ICMP_HEADER)+DEF_ICMP_DATA_SIZE);/记录序列号和当前时间stDecodeResult.usSeqNo = (ICMP_HEADER*)IcmpSendBuf)-seq;stDecodeResul

8、t.dwRoundTripTime = GetTickCount();/发送 ICMP 的 EchoRequest 数据报if (sendto(sockRaw, IcmpSendBuf, sizeof(IcmpSendBuf), 0, (sockaddr*)iSize -= sizeof(USHORT);if (iSize) cksum += *(UCHAR*)pBuf;9cksum = (cksum 16) + (cksum cksum += (cksum 16);return (USHORT)(cksum);/解码得到的数据报BOOL DecodeIcmpResponse(char* pB

9、uf, int iPacketSize, DECODE_RESULTint iIpHdrLen = pIpHdr-hdr_len * 4;if (iPacketSize type = ICMP_ECHO_REPLY)usID = pIcmpHdr-id;usSquNo = pIcmpHdr-seq;else if(pIcmpHdr-type = ICMP_TIMEOUT)char* pInnerIpHdr = pBuf+iIpHdrLen+sizeof(ICMP_HEADER); /载荷中的 IP 头int iInnerIPHdrLen = (IP_HEADER*)pInnerIpHdr)-h

10、dr_len * 4;/载荷中的 IP 头长ICMP_HEADER* pInnerIcmpHdr = (ICMP_HEADER*)(pInnerIpHdr+iInnerIPHdrLen);/载荷中的 ICMP 头usID = pInnerIcmpHdr-id;usSquNo = pInnerIcmpHdr-seq;elsereturn FALSE;if (usID != (USHORT)GetCurrentProcessId() | usSquNo !=stDecodeResult.usSeqNo) return FALSE;/处理正确收到的 ICMP 数据报if (pIcmpHdr-type

11、 = ICMP_ECHO_REPLY |10pIcmpHdr-type = ICMP_TIMEOUT)/返回解码结果stDecodeResult.dwIPaddr.s_addr = pIpHdr-sourceIP;stDecodeResult.dwRoundTripTime = GetTickCount()-stDecodeResult.dwRoundTripTime;/打印屏幕信息if (stDecodeResult.dwRoundTripTime)cout setw(6) stDecodeResult.dwRoundTripTime “ ms“ flush;elsecout setw(6)

12、 “1“ “ ms“ flush;return TRUE;return FALSE;五、实验数据、结果分析11该程序将包含不同生存时间(TTL)值的 Internet 控制消息协议(ICMP)回显数据包发送到目标,以决定到达目标采用的路由。要在转发数据包上的 TTL 之前至少递减1,必需路径上的每个路由器,所以 TTL 是有效的跃点计数。数据包上的 TTL 到达 0 时,路由器应该将“ICMP 已超时”的消息发送回源系统。Tracert 先发送 TTL 为 1 的回显数据包,并在随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。路由通过检查中级路由器发送

13、回的“ICMP 已超时”的消息来确定路由。六、总结路由追踪的过程是,源主机向目的主机发送一个类为 8 的回应请求报文,若目的站收到回应请求报文,则把把报文 IP 包头部中的目的 IP 与源主机的 IP 地址交换,将类型为 8 改为回应类型 0,计算出新的校验和再发往源主机。若源主机受到了该回应报文,则不但说明了,目的主机可达,而且说明目的主机与源主机之间的路由器工作正常。源主机和目的主机的 IP、ICMP 软件运行正常。但若在传播过程中出现了某些问题,如网络不通、目的主机不在网络中等,导致数据被定向一个无效的目的地,这时相关的路由器或目的主机将发回目的不可达报文,并在代码中说明该报文的具体情况:是网络不可达还是主机不可达等。若请求报文在传播过程中超时,即 TTL 被减为0(报文每经过一个路由器 TTL 都要减 1,则该路由器返回一个 TTL 超时报文(类型为 11),报文 IP 头中源 IP 地址即为本路由器的 IP 地址。七、教师意见

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报