了解traceroute基本概念安全
了解traceroute工做原理及详细过程网络
熟悉traceroute经常使用命令dom
traceroute (Windows系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的全部路由器。TTL值能够反映数据包通过的路由器或网关的数量,经过操纵独立ICMP呼叫报文的TTL值和观察该报文被抛弃的返回信息,traceroute命令可以遍历到数据包传输路径上的全部路由器。traceroute是一条缓慢的命令,由于每通过一台路由器都要花去大约10到15秒。工具
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是一个骗子一点也不为过:)。其详细过程以下:学习
traceroute的用法为: Traceroute [options] <IP-address or domain-name> [data size]测试
[options]的内容有:spa
[data size]:每次测试包的数据字节长度(缺省为38)设计
并非全部网关都会如实返回ICMP超时报文。出于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各类ICMP报文,其他路由器或交换机也可能被管理员主动修改配置变为不返回 ICMP报文。所以traceroute程序不必定能拿到全部的沿途网关地址。因此,当某个TTL值的数据包得不到响应时,并不能中止这一追踪过程,程序仍然会把TTL递增而发出下一个数据包。这个过程将一直持续到数据包发送到目标主机,或者达到默认或用参数指定的追踪限制(maximum_hops)才结束追踪。依据上述原理,利用了UDP数据包的traceroute程序在数据包到达真正的目的主机时,就可能由于该主机没有提供UDP服务而简单将数据包抛弃,并不返回任何信息。为了解决这个问题,traceroute故意使用了一个大于30000的端口号,因UDP协议规定端口号必须小于30000,因此目标主机收到数据包后惟一能作的事就是返回一个“端口不可达”的ICMP报文,因而主叫方就将端口不可达报文看成跟踪结束的标志。router
使用UDP的traceroute,失败仍是比较常见的。这经常是因为,在运营商的路由器上,UDP与ICMP的待遇大不相同。为了利于troubleshooting,ICMP ECHO Request/Reply 是不会封的,而UDP则不一样。UDP常被用来作网络攻击,由于UDP无需链接,于是没有任何状态约束它,比较方便攻击者伪造源IP、伪造目的端口发送任意多的UDP包,长度自定义。因此运营商为安全考虑,对于UDP端口经常采用白名单ACL,就是只有ACL容许的端口才能够经过,没有明确容许的则通通丢弃。好比容许DNS/DHCP/SNMP等。blog