使用ICMP实现路由跟踪

代码运行效果图如下:

作者简介:本人是成都理工大学大四学生,学习计算机通信专业,对网络及编程有着非常浓厚的兴趣,希望能与大家共同探讨。

[摘要] 本文简单介绍了ICMP协议和一种利用ICMP在VC++下实现网络路由跟踪的方法,并给出一了个详细的例子。

[关键字] ICMP 路由跟踪 Visual C++6.0

一、概述

计算机在Internet中传递信息时,必须要经过路由器进行网络路由才能找到目的主机,把信息送到目的主机。路由器中都有一张路由表,表中保存了从本路由器到某一主机的路由信息,路由器就是通过该路由表进行网络寻径的。两台主机之间并没有一条固定的路径(即路由表并不固定),该路径随着网络的变动而作相应的变动,因而我们并不能直接从某一主机上得到去往另一主机的路径,要得到本机与网络上某台主机的网络路径就必须要进行路由跟踪。本文将介绍一种实现路由跟踪的方法。

二、ICMP简介

ICMP即Internet控制报文协议是一种用于特殊用途的报文机制,可以使互联网中的路由器或主机报告差错或提供有关意外情况的信息。

ICMP报文为两级封装,ICMP报文放在IP数据报的数据部分,IP数据报则放在帧的数据中进行网络传输(如下图1所示)。ICMP报文与其他普通报文一样,具有相同的路由选择,并没有特殊的优先权和增加可靠性。

(图1)ICMP报文的封装

在ICMP包头中包含了三个字段:1字节类型域、1字节代码域、2字节校验和。类型域表示了该报文的类型,如:回应请求报文,数据报超时报文等,代码域表示了该类型的几种不同情况,如:当类型为11(超时报文)时,代码为0表示TTL超时,为1表示片重组超时。在实现本文中所述的功能时要发送回应请求报文(类型为8),过程如下:源主机向目的主机发送一个类型为8的回应请求报文,若目的站点收到回应请求报文则把报文IP包头部中的目的IP与源IP地址交换,将类型8改为回应类型0,计算出新的校验和再发往源主机。若源主机收到了该回应报文,则不但说明了目的主机可达,而且说明目的主机与源主机之间的路由器工作正常,源主机和目的主机的IP、ICMP软件运行正常。但若在传输过程中了出现了某些问题,如网络不通等,导致数据被定向到一个无效的目的地,这时相关路由器或目的主机将发回目的不可达报文(类型为3),并在代码中说明该报文的具体情况:是网络不可达还是主机不可达等。若请求报文在传输过程中超时,即TTL被减为0(报文每经过一个路由器TTL都要减1),则该路由器返回一个TTL超时报文(类型为11),报文IP头中源IP地址即为本路由器的IP地址。

时间: 2024-11-01 13:20:12

使用ICMP实现路由跟踪的相关文章

使用第二层路由跟踪进行排错

通过traceroute ip的方式来排除网络故障,相信很多人都非常的熟悉.这是基于IP地址(第三层)路由跟踪,可疑用来排除大部分的网络故障.而使用第二层路由跟踪,其跟第三层路由跟踪非常的相似.其一个本质的区别就在于第二层路由跟踪是基于MAC地址来进行跟踪的,并解决第二层连接的故障.在确定第二层拓扑中数据传输的路径,这个第二层路由跟踪将是一种非常有用的工具.一.traceroute ip的缺陷traceroute ip虽然在排错过程中具有很大的作用,基本上是每个网络管理员必须要掌握的内容. 但是

《Nmap渗透测试指南》—第2章2.15节路由跟踪

2.15 路由跟踪表2.14所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令--路由跟踪. 使用--traceroute选项即可进行路由跟踪,使用路由跟踪功能可以帮助用户了解网络的同行情况,通过此选项可以轻松地查出从本地计算机到目标之间所经过的网络节点,并可以看到通过各个节点的时间. root@Wing:~# nmap --traceroute -v www.163.com Starting Nmap 6.47 ( http://nmap.org ) at 2015-06-27 21

菜鸟黑客常用入侵命令(5)——tracert(路由跟踪)

问题描述 tracert是跟踪路由实用程序,用于确定IP数据包访问目标主机所采取的路径,从返回的结果可以得知从本地电脑发送数据包到目标主机所经过的网络设备,从而得知其传送路径.tracert命令的格式为:tracert[-d][-hmaximum_hops][-jhost-list][-wtimeout]target_name[-d]参数指不需要将IP地址翻译为域名:[-hmaximum_hops]参数指允许跟踪的最大跳数:[-jhost-list]参数指经过的主机列表:[-wtimeout]参

ICMP攻击和基于ICMP的路由欺骗

一. ICMP简介 ICMP的全称是Internet Control Message Protocol(网间报文控制协议),它是IP不可分割的一部分,用来提供错误报告.一旦发现各种错误类型就将其返回原主机,我们平时最常见的ping命令就是基于ICMP的. |-----------------------------------------| || ------ ICMP ECHO request ------ || |HOST| -------------> |HOST| || | A | <

用CMD命令实现路由跟踪

本文用跟踪GOOGLE的例子去实现了CMD如何进行的操作,并且显示了跟踪的路径,下面文章给出了详细的操作步骤.CMD命令tracert xxx.xxx.com 例如谷歌C:\>tracert www.google.comTracing route to www.l.google.com [64.233.189.104]over a maximum of 30 hops:1 11 ms 20 ms 19 ms 183.2.60.12 11 ms 14 ms 14 ms 121.32.149.249

路由追踪命令详解

网络命令是个很有意思的事情.对计算机网络很熟悉的朋友可能都知道有路由追踪这么一说,笔者也是前不久开始接触的,由于最近访问有些网站特别慢,询问网络提供商告知存在电信网络节点存在堵塞的情况,要求笔者做一个路由跟踪,但是笔者对此也是一无所知,后面还是跟网络商技术学的这里分享下,希望对电脑爱好者有所参考. 首先介绍下什么是路由追踪,路由器追踪功能 ,能够帮网络管理员了解网络通行情况,同时也是网络管理人员很好的辅助工具!通过路由器追踪可以轻松的查处从我们电脑所在地到目标地之间所经常的网络节点,并可以看到通

《Python自动化运维:技术与最佳实践》一3.3 生成动态路由轨迹图

3.3 生成动态路由轨迹图 scapy(http://www.secdev.org/projects/scapy/)是一个强大的交互式数据包处理程序,它能够对数据包进行伪造或解包,包括发送数据包.包嗅探.应答和反馈匹配等功能.可以用在处理网络扫描.路由跟踪.服务探测.单元测试等方面,本节主要针对scapy的路由跟踪功能,实现TCP协议方式对服务可用性的探测,比如常用的80(HTTP)与443(HTTPS)服务,并生成美观的路由线路图报表,让管理员清晰了解探测点到目标主机的服务状态.骨干路由节点所

软件-利用C#进行路由追踪测试

问题描述 利用C#进行路由追踪测试 我想编写一个软件实现路由追踪测试,我想问一下用C#实现功能的思路 解决方案 Process p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.Star

装饰器实现路由控制

part 1 def application(env, start_response): print(env['PATH_INFO']) status = '200 OK' response_headers = [('Content-Type', 'text/html')] start_response(status, response_headers) return ['您请求的路径为:{}'.format(env['PATH_INFO']).encode('utf8')] from weba