[练习]traceroute命令

需求分析


traceroute命令:用于追踪数据包在 络上的传输时的全部路径,并测量其返回的时间。

  1. 可以知道信息从你的计算机到互联 的另一端主机是走的什么路径,相同的包(相同出发点和目的地)走的路径或许不同。
  2. 局域 在不同的 段之间,通过该命令排查是主机问题还是路由问题。

Linux常用 络工具:路由扫描之traceroute,链接 参考资料:

  1. 《计算机 络》4.4 际控制 文协议ICMP UDP
  2. 《UNIX 络编程·卷1 套接字接口API》28章
  3. ping百科、traceroute百科

Linux 与 Win 的实现区别


Linux: 结论:      Linux提供两个实现(ICMP与UDP),指定实现方式需要root权限。 星 表示该路由 络不通畅(并非不通),提示命令重新寻址,所以不返回router信息。 Win: 上面Win的自行操作,结论:      Win提供UDP实现 方案探索(进一步理解 际协议)


  1. UDP traceroute:发送udp路由数据包,监测返回icmp差错 告数据包
  2. ICMP traceroute: 发送icmp路由数据包,监测返回icmp差错 告数据包

参考链接 方案分析 UDP traceroute 利用:ICMP协议(类型)和UDP协议(端口)

  1. TTL-expired(type 11)
  2. ICMP port unreachable(type 3, code 3)
  3. UDP(port >32768 )

操作流程

  1. source发出UDP packet,
    1. source port使用随机的任何大于32768的高段port#,
    2. destination port # 从33434开始每送个probe依此递增,直至33434+29, (cisco router上使用extended-traceroute命令可以修改这个起始的33434 port #),
  2. 同时TTL从1开始依此递增,直至1+29=30(最多送30个probe)。
  3. 中间的router送回 ICMP TTL-expired,使得source得知了中间的每一个router,
  4. 最后的destination送回TTL-expired 和ICMP port unreachable (因为任何主机上都没有应用使用UDP port# >32768这样的高段port#)。 

影响因素

  1. 中间某处封掉UDP port>32768回导致traceroute不工作
  2. 封掉TTL超时会使source看不到中间的router(有的router根本不支持回送TTL超时)
  3. 封掉type3, code3可能看不到destination


ICMP traceroute 利用:ICMP协议(类型)

  1. Echo Request(type 8)
  2. Echo Reply(type 0)
  3. TTL-expired(type 11)

操作流程

  1. 源发出 ICMP Equest,第一个request的TTL为1,第二个request的TTL为2,以后依此递增直至第30个;
  2. 中间的router送回ICMP TTL-expired ( ICMP type 11) 通知source,(packet同时因TTL超时而被drop),由此source知晓一路上经过的每一个router;
  3. 最后的destination送回ICMP Echo Reply。

影响因素

  1. 中间任何一个router上如果封了ICMP Echo Request, traceroute就不能工作;
  2. 如果封了type 11 (TTL-expired), 中间的router全看不到,但能看到packet 到达了最后的destination;
  3. 如果封了ICMP Echo Reply,中间的全能看到,最后的destination看不到。

实现过程


流程图如下:

[练习]traceroute命令
github代码下载

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年3月22日
下一篇 2017年3月22日

相关推荐