traceroute命令初探

1、学习目标

  • 了解traceroute基本概念安全

  • 了解traceroute工做原理及详细过程网络

  • 熟悉traceroute经常使用命令dom

  • 一些注意点

2、traceroute基本概念

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

3、traceroute工做原理及详细过程

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

  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消息。

4、traceroute经常使用命令

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

  [options]的内容有:spa

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

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

 

5、一些注意点

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

  • 使用UDPtraceroute,失败仍是比较常见的。这经常是因为,在运营商的路由器上,UDPICMP的待遇大不相同。为了利于troubleshootingICMP ECHO Request/Reply 是不会封的,而UDP则不一样。UDP常被用来作网络攻击,由于UDP无需链接,于是没有任何状态约束它,比较方便攻击者伪造源IP、伪造目的端口发送任意多的UDP包,长度自定义。因此运营商为安全考虑,对于UDP端口经常采用白名单ACL,就是只有ACL容许的端口才能够经过,没有明确容许的则通通丢弃。好比容许DNS/DHCP/SNMP等。blog

  • 总结一下,traceroute主要利用IP数据包的TTL字段值 + ICMP来实现,它发送的用于探测网络路径的数据包的IP之上的协议能够是 UDP、TCPICMP不一样模式下,探测过程当中设计的数据包以下:
  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,第一个requestTTL1,第二个requestTTL2,之后依此递增直至第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看不到。
相关文章
相关标签/搜索