需求分析
traceroute命令:用于追踪数据包在 络上的传输时的全部路径,并测量其返回的时间。
- 可以知道信息从你的计算机到互联 的另一端主机是走的什么路径,相同的包(相同出发点和目的地)走的路径或许不同。
- 局域 在不同的 段之间,通过该命令排查是主机问题还是路由问题。
Linux常用 络工具:路由扫描之traceroute,链接 参考资料:
- 《计算机 络》4.4 际控制 文协议ICMP UDP
- 《UNIX 络编程·卷1 套接字接口API》28章
- ping百科、traceroute百科
Linux 与 Win 的实现区别
Linux: 结论: Linux提供两个实现(ICMP与UDP),指定实现方式需要root权限。 星 表示该路由 络不通畅(并非不通),提示命令重新寻址,所以不返回router信息。 Win: 上面Win的自行操作,结论: Win提供UDP实现 方案探索(进一步理解 际协议)
- UDP traceroute:发送udp路由数据包,监测返回icmp差错 告数据包
- ICMP traceroute: 发送icmp路由数据包,监测返回icmp差错 告数据包
参考链接 方案分析 UDP traceroute 利用:ICMP协议(类型)和UDP协议(端口)
- TTL-expired(type 11)
- ICMP port unreachable(type 3, code 3)
- UDP(port >32768 )
操作流程
- source发出UDP packet,
- source port使用随机的任何大于32768的高段port#,
- destination port # 从33434开始每送个probe依此递增,直至33434+29, (cisco router上使用extended-traceroute命令可以修改这个起始的33434 port #),
- 同时TTL从1开始依此递增,直至1+29=30(最多送30个probe)。
- 中间的router送回 ICMP TTL-expired,使得source得知了中间的每一个router,
- 最后的destination送回TTL-expired 和ICMP port unreachable (因为任何主机上都没有应用使用UDP port# >32768这样的高段port#)。
影响因素
- 中间某处封掉UDP port>32768回导致traceroute不工作
- 封掉TTL超时会使source看不到中间的router(有的router根本不支持回送TTL超时)
- 封掉type3, code3可能看不到destination
ICMP traceroute 利用:ICMP协议(类型)
- Echo Request(type 8)
- Echo Reply(type 0)
- TTL-expired(type 11)
操作流程
- 源发出 ICMP Equest,第一个request的TTL为1,第二个request的TTL为2,以后依此递增直至第30个;
- 中间的router送回ICMP TTL-expired ( ICMP type 11) 通知source,(packet同时因TTL超时而被drop),由此source知晓一路上经过的每一个router;
- 最后的destination送回ICMP Echo Reply。
影响因素
- 中间任何一个router上如果封了ICMP Echo Request, traceroute就不能工作;
- 如果封了type 11 (TTL-expired), 中间的router全看不到,但能看到packet 到达了最后的destination;
- 如果封了ICMP Echo Reply,中间的全能看到,最后的destination看不到。
实现过程
流程图如下:
![[练习]traceroute命令](https://www.iruanshi.com/tt5/wp-content/uploads/2022/12/slt.png)
github代码下载
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!