一、学习目标

  • 了解traceroute基本概念

  • 了解traceroute工作原理及详细过程

  • 熟悉traceroute常用命令

  • 一些注意点

二、traceroute基本概念

  traceroute (Windows系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器。TTL值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP呼叫报文的TTL值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器。traceroute是一条缓慢的命令,因为每经过一台路由器都要花去大约10到15秒。

三、traceroute工作原理及详细过程

  traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器,所以traceroute正好就填补了这个缺憾。traceroute的原理是非常非常的有意思,它收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。有人要问,我怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较小的端口,比如说80,比如说23,等等。而traceroute发送的是端口号大于30000(真变态)的UDP报,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说traceroute是一个骗子一点也不为过:)。windows 7下tracert 详细过程如下:

  1. 将传递到目的IP地址的ICMP Echo消息的TTL值被设置为1,该消息报经过第一个路由器时,其TTL值减去1,此时新产生的TTL值为0。
  2. 由于TTL值被设置为0,路由器判断此时不应该尝试继续转发数据报,而是直接抛弃该数据报。由于数据报的生存周期(TTL值)已经到期,这个路由器会发送一个一个ICMP时间超时,即TTL值过期信息返回到客户端计算机。
  3. 此时,发出traceroute命令的客户端计算机将显示该路由器的名称,之后可以再发送一个ICMP Echo消息并把TTL值设置为2。
  4. 第1个路由器仍然对这个TTL值减1,然后,如果可能的话,将这个数据报转发到传输路径上的下一跳。当数据报抵达第2个路由器,TTL值会再被减去1,成为0值。
  5. 第2个路由器会像第1个路由器一样,抛弃这个数据包,并像第1个路由器那样返回一个ICMP消息。
  6. 该过程会一直持续,traceroute命令不停递增TTL值,而传输路径上的路由器不断递减该值,直到数据报最终抵达预期的目的地。
  7. 当目的计算机接收到ICMP Echo消息时,会回传一个ICMP Echo Reply消息。

注: Windows 7 默认ICMP协议,Ubuntu 默认不带参数为UDP协议。

四、traceroute常用命令

  traceroute的用法为: Traceroute [options] <IP-address or domain-name> [data size]

  [options]的内容有:

  • [-n]:显示的地址是用数字表示而不是符号
  • [-v]:长输出
  • [-p]:UDP端口设置(缺省为33434)
  • [-q]:设置TTL测试数目(缺省为3)
  • [-t]:设置测包的服务类型

  [data size]:每次测试包的数据字节长度(缺省为38)

五、一些注意点

  • 并不是所有网关都会如实返回ICMP超时报文。出于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种ICMP报文,其余路由器或交换机也可能被管理员主动修改配置变为不返回 ICMP报文。因此traceroute程序不一定能拿到所有的沿途网关地址。所以,当某个TTL值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把TTL递增而发出下一个数据包。这个过程将一直持续到数据包发送到目标主机,或者达到默认或用参数指定的追踪限制(maximum_hops)才结束追踪。依据上述原理,利用了UDP数据包的traceroute程序在数据包到达真正的目的主机时,就可能因为该主机没有提供UDP服务而简单将数据包抛弃,并不返回任何信息。为了解决这个问题,traceroute故意使用了一个大于30000的端口号,因UDP协议规定端口号必须小于30000,所以目标主机收到数据包后唯一能做的事就是返回一个“端口不可达”的ICMP报文,于是主叫方就将端口不可达报文当作跟踪结束的标志。

  • 使用UDP的traceroute,失败还是比较常见的。这常常是由于,在运营商的路由器上,UDP与ICMP的待遇大不相同。为了利于troubleshooting,ICMP ECHO Request/Reply 是不会封的,而UDP则不同。UDP常被用来做网络攻击,因为UDP无需连接,因而没有任何状态约束它,比较方便攻击者伪造源IP、伪造目的端口发送任意多的UDP包,长度自定义。所以运营商为安全考虑,对于UDP端口常常采用白名单ACL,就是只有ACL允许的端口才可以通过,没有明确允许的则统统丢弃。比如允许DNS/DHCP/SNMP等。

  • 总结一下,traceroute主要利用IP数据包的TTL字段值 + ICMP来实现,它发送的用于探测网络路径的数据包的IP之上的协议可以是 UDP、TCP或ICMP。不同模式下,探测过程中设计的数据包如下:
  1. UDP模式:UDP探测数据包(目标端口大于30000) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回ICMP Destination Unreachable 数据包
  2. TCP模式:TCP [SYN]探测数据包(目标端口为Web服务的80) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回TCP [SYN ACK] 数据包
  3. ICMP模式:ICMP Echo (ping) Request 探测数据包 + 中间网关发回ICMP TTL超时数据包 + 目标主机发回ICMP Echo (ping) reply 数据包
  • traceroute出现*的分析:源发出ICMP Request,第一个request的TTL为1,第二个request的TTL为2,以后依此递增直至第30个;中间的router送回ICMP TTL-expired ( ICMP type 11) 通知source,(packet同时因TTL超时而被drop),由此source知晓一路上经过的每一个router;最后的destination送回ICMP Echo Reply(最后一跳不会再回ICMP TTL-expired)。所以中间任何一个router上如果封了ICMP Echo Request, traceroute就不能工作;如果封了type 11(TTL-expired), 中间的router全看不到,但能看到packet到达了最后的destination;如果封了ICMP Echo Reply,中间的全能看到,最后的destination看不到。

原文链接:https://www.cnblogs.com/beyond_dxb/p/8383821.html

traceroute命令初探相关推荐

  1. 【Linux】一步一步学Linux——traceroute命令(167)

    00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 traceroute命令用于追踪数据包在网络上的传输时的全 ...

  2. traceroute命令---Linux学习笔记

    介绍: 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可 ...

  3. linux系统里route -n不起作用,Linux系统中traceroute命令使用详解

    Linux系统中traceroute命令可以追踪到网络数据包的路由途径.下面由学习啦小编为大家整理了linux系统中traceroute命令使用详解,希望对大家有帮助! Linux系统中tracero ...

  4. zabbix利用traceroute命令监控主备链路状态

    转载来源 :利用traceroute命令监控主备链路状态 : http://www.lwops.cn/thread-236-1-2.html 一.前提:三角型区域的路由是用ospf做的,都划分进are ...

  5. 常见网络命令之traceroute命令一起其他常用命令

    备注:任何命令+/?就可以显示命令帮助,比如:ipconfig /?. traceroute命令 traceroute是UNIX系统中的名字,用来跟踪一个分组从源点到终点的路径.在Windows系统中 ...

  6. 常用网络测试命令——arp命令、traceroute命令

    ARP是tcp/ip协议族中的一个重要协议,用于确定对应IP地址和网卡物理地址(mac). 使用arp命令,能够查看本地计算机或另一台计算机的arp高速缓存的当前内容.此外,使用arp命令可以以人工方 ...

  7. traceroute命令(unix)/tracert命令(windows)

    tracert命令的格式为:tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] [-R] [-S srcaddr] [-4] [-6] ...

  8. traceroute命令(unix)/tracert命令(windows)的工作原理

    traceroute命令(unix)/tracert命令(windows)的工作原理     traceroute命令和tracert命令的工作原理是一样的,只是前者用于unix和linux系统中,而 ...

  9. php tracert,Windows下tracert命令和Linux下traceroute命令

    Windows下tracert命令和Linux下traceroute命令 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(so ...

最新文章

  1. MySQL排序原理与MySQL5.6案例分析【转】
  2. Linux系统状态检测及进程控制--2
  3. LINUX 错误代码
  4. 完整的安全方案需要参考的几个方面
  5. 一次网站登录慢故障排查
  6. apache comments io包IOUtils方法简单介绍
  7. Java注释以及快捷键
  8. (附源码)计算机毕业设计SSM基于大数据的高校国有固定资产管理及绩效自动评价系统
  9. 文献分享:定义的肿瘤抗原特异性T细胞增强了个性化的TCR-T细胞治疗和免疫治疗反应的预测
  10. 山东省大学生软件设计大赛一等奖作品参赛视频
  11. Python实现奇数阶幻方(不用numpy)
  12. HDU 1997 汉诺塔VII
  13. Apache配置文件中Order Allow Deny笔记心得
  14. Unit mysqld.service entered failed state
  15. C语言新手常犯的错误-截断
  16. mysql读缓存_优化MySQL,还是使用缓存?读一篇文章有感
  17. rad+xray漏洞扫描工具
  18. 商业模式画布、精益画布
  19. 雷达多普勒频率计算公式_第二章 第四节 波的多普勒效应
  20. 如何在eclipse中绑定Genymotion模拟器,并使用

热门文章

  1. 网件路由器usb存储共享_如何共享对Netgear Arlo相机的访问权限
  2. 人生中第一份值得纪念的工作
  3. 【软件】SecureCRT8.3.0软件及注册码
  4. android 背景图遮罩,通过css使用background-color为背景图添加遮罩效果
  5. 手把手教你使用Python网络爬虫获取菜谱信息
  6. 国家电网DLT645-2007智能电表测试软件
  7. Gitee pages无法更新
  8. Android输入事件从读取到分发四:InputDispatcherThread发送事件到View结构树的过程
  9. MongoDB安装与基本操作
  10. 教你如何把苍白的人生写成老板都心动的简历