traceroute基本原理_实践与认识的相关原理

traceroute基本原理_实践与认识的相关原理*本文原创作者:ArkTeam/YSYY,转载须注明来自FreeBuf.COM一、路由追踪程序traceroute/tracertTraceroute是Linux和MacOS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序。二者的功能相同,都能探测数据包从源地址到目的地址经过的路由器的IP地址。Traceroute/Tracert的实现都借助了T…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

*本文原创作者:ArkTeam/YSYY,转载须注明来自FreeBuf.COM

一、路由追踪程序traceroute/tracert

Traceroute是Linux和Mac OS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序。二者的功能相同,都能探测数据包从源地址到目的地址经过的路由器的IP地址。Traceroute/Tracert的实现都借助了TTL:通过向目的地址发送一系列的探测包,设置探测包的TTL初始值分别为1,2,3…,根据返回的超时通知(ICMP Time Exceeded Message)得到源地址与目的地址之间的每一跳路由信息。虽然两者输出结果一致,但在实现原理上还有着显著的差别。

二、Traceroute实现原理

traceroute基本原理_实践与认识的相关原理

1. 从源地址发出一个UDP探测包到目的地址,并将TTL设置为1;

2. 到达路由器时,将TTL减1;

3. 当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;

4. 当源地址收到该ICMP包时,显示这一跳路由信息;

5. 重复1~5,并每次设置TTL加1;

6. 直至目标地址收到探测数据包,并返回端口不可达通知(ICMP Port Unreachable);

7. 当源地址收到ICMP Port Unreachable包时停止traceroute。

注:

1. Linux和Mac OS等系统使用UDP包进行探测,目标端口号默认为33434,每次探测目标端口号加1。Traceroute故意使用了一个大于 30000 的目标端口号,以保证目标地址收到数据包后能够返回一个“端口不可达”的 ICMP 报文,于是源地址就可将端口不可达报文当作跟踪结束的标志。

2.Traceroute每跳默认发送3个探测包(发包的数量可通过-q进行设置),探测包的返回会受到网络情况的影响。如果防火墙封掉了ICMP的返回信息,那么相应的延时位置会以*显示。如果某台网关阻塞或者某台DNS出现问题,那么相应行的延时会变长。可以加-n 参数来避免DNS解析,以IP格式输出数据。

3.每个探测包都有唯一的标识号,使得Traceroute能够识别返回的包。UDP数据包使用递增的目标端口号进行标识。

三、Tracert实现原理

traceroute基本原理_实践与认识的相关原理

1. 从源地址发出一个ICMP请求回显(ICMP Echo Request)数据包到目的地址,并将TTL设置为1;

2. 到达路由器时,将TTL减1;

3. 当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;

4. 当源地址收到该ICMP包时,显示这一跳路由信息;

5. 重复1~5,并每次设置TTL加1;

6. 直至目标地址收到探测数据包,并返回ICMP回应答复(ICMPEcho Reply);

7. 当源地址收到ICMP Echo Reply包时停止tracert。

注:

1.Windows系统使用ICMP请求回显(ICMP Echo Request)数据包进行探测,源地址以目的地址返回的ICMP回应答复(ICMP Echo Reply)作为跟踪结束标志。

2.Traceroute每跳默认发送3个探测包。在未能到达路由器或未返回ICMP超时通知的情况下,相应的延时位置会以*显示。

3.每个探测包都有唯一的标识号,ICMP数据包使用seq进行标识。

四、Wireshark抓包解析

本次实验通过追踪本机到达www.baidu.com所经过的路由信息,并使用Wireshark抓取数据包进行简要分析来验证traceroute和tracert的实现原理。

1.Linux/ Mac OS——traceroute

1Mac OS

traceroute www.baidu.com

traceroute基本原理_实践与认识的相关原理

如图,Traceroute能够显示到达目的地址所需的跳数、经过的路由器的IP地址、延时、丢包情况等信息。第一跳为10.203.4.225,第二跳为10.2.30.1,第三跳为10.2.1.1;每条记录输出3个延时结果,说明源地址每次默认发送三个数据包;在11条记录只有1个延时结果,说明源地址只收到了1个ICMP超时通知消息。

traceroute基本原理_实践与认识的相关原理

如图,源地址10.203.4.244向目的地址119.75.218.70发送UDP数据包,每跳默认发送3个,TTL设置为1;数据包遇到路由器之后,被丢弃,返回Time tolive exceeded超时通知,解析出路由器IP地址10.203.4.225。源地址再发数据包,设置TTL=2,从而解析出第二跳路由10.2.30.1。同理,解析出第三跳路由10.2.1.1。与终端显示的信息相符。

从图中还可以看出,数据包目标端口号从33435开始并且每次加1,traceroute能够通过UDP数据包递增的目标端口号来唯一识别返回的包。

traceroute基本原理_实践与认识的相关原理

如图,第11跳的61.51.113.202路由只返回了一个ICMP超时通知,与终端显示的信息相符。

traceroute基本原理_实践与认识的相关原理

如图,TTL=34时,ICMP数据包中Type=3(Destination unreachable),Code=3(Port unreachable),说明目的地址向源地址发送了端口不可达通知(ICMP Port Unreachable),表示数据包到达目的地址。

(2)Linux

traceroute www.baidu.com

traceroute基本原理_实践与认识的相关原理

traceroute基本原理_实践与认识的相关原理

traceroute基本原理_实践与认识的相关原理

Linux系统下的抓包解析与Mac OS类似。

2. Windows——tracert

tracert www.baidu.com

traceroute基本原理_实践与认识的相关原理

如图,第一跳为10.8.160.1,第二跳为10.0.14.1,第三跳为10.0.4.41;每条记录输出3个延时结果,说明源地址每次默认发送三个数据包;在第6条记录只有2个延时结果,说明源地址只收到了2个ICMP超时通知消息;数据包从源地址经过15跳之后到达目的地址。

traceroute基本原理_实践与认识的相关原理

如图,源地址10.8.169.32向目的地址220.181.111.188发送ICMP请求回显(ICMP Echo Request)数据包,每跳默认发送3个,TTL设置为1;数据包遇到路由器之后,被丢弃,返回Time tolive exceeded超时通知,解析出路由器IP地址10.8.160.1。源地址再发数据包,设置TTL=2,从而解析出第二跳路由10.0.14.1和10.0.14.5。同理,解析出第三跳路由10.0.4.41。与终端显示的信息相符。

从图中还可以看出,数据包从seq=142开始每次加1,tracert能够通过seq来唯一识别返回的包。

traceroute基本原理_实践与认识的相关原理

如图,seq=157的数据包没有得到路由器172.16.7.1的超时通知消息,因此第6跳只有两个延时结果,与终端显示的信息相符。

traceroute基本原理_实践与认识的相关原理

如图,TTL=15时,源地址收到了目的地址的ICMP回应答复(ICMP Echo Reply),说明源地址经过了15跳到达目的地址,与终端显示信息相符。

五、The Great Cannon案例

2015年3月26日开始,因某些众所周知的原因,GitHub遭到其网站历史上最大规模DDoS攻击。瑞典网络安全公司Netresec通过查看数据包中的TTL值断定这是一起中间人攻击事件。在此过程中,他们借助了路由追踪程序traceroute/tracert的实现原理。首先建立一个正常的连接,确保数据包能够到达目标机器。然后依次发送TTL值为1,2,3…的HTTP请求。若数据包没有到达中间人设备,则不会出现HTTP响应;若数据包到达中间人设备,则会出现HTTP响应,然后只需在出现HTTP响应时,查看请求数据包设置初始TTL值即可。

安全人员根据下图发现中间人设备潜伏在11和12跳之间。Web请求中 TTL 值为11的时候数据包没有响应,而TTL值为12的时候,返回了正常响应。

traceroute基本原理_实践与认识的相关原理

traceroute基本原理_实践与认识的相关原理

六、小结

Traceroute/tracert路由追踪程序是用来追踪数据包到达网络主机所经过的路由信息的重要工具,虽然路由追踪效果一致,但实现原理略有不同:前者借助UDP协议,后者借助ICMP协议。此外,利用TTL追踪攻击主机的位置,也为我们提供了新的思路。

参考资料

[1] http://www.cnblogs.com/peida/archive/2013/03/07/2947326.html

[2] http://www.dearda.com/index.php/archives/1361

[3] https://translate.google.com/translatehl=zh-CN&sl=en&u=https://technet.microsoft.com/en-us/library/cc940128.aspx&prev=search

[4] http://www.freebuf.com/news/topnews/63148.html

[5]https://blog.gesha.net/archives/499/

*本文原创作者:ArkTeam/YSYY,转载须注明来自FreeBuf.COM

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189997.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • docker 修改容器时间_jenkins docker持续集成

    docker 修改容器时间_jenkins docker持续集成前言用docker搭建的Jenkins环境时间显示和我们本地时间相差8个小时,需修改容器内部的系统时间查看时间查看系统时间date-R进入docker容器内部,查看容器时间dockere

  • lefse分析

    lefse分析LEfSe(LDAEffectSize)分析,可以用于两个或多个分组之间的比较,从而找到组间有显著性差异的物种(即biomarker),分析步骤主要分为三步:Step1:利用Kruskal-Wallis秩和检验检测所有的特征物种,通过检测不同组间的物种丰度差异,获得显著性差异物种。Step2:再利用Wilcoxon秩和检验检测上步获得的显著性差异物种的所有亚种是否都趋同…

  • 归并排序算法详细图解_归并排序算法详解

    归并排序算法详细图解_归并排序算法详解一、什么是归并排序1.概念归并排序(Mergesort)是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的2.算法原理这是一个无序数列:4、5、8、1、7、2、6、3,我们要将它按从小到大排序。按照归并排序的思想,我们要把序列逐层进行拆分序列逐层拆分如下然后从下往上逐层合并,首先对第一层序列1(只包含元素4)和序列2(只包含元素5)进行合并创建一个大序列,序列长度为两个小序列长度

    2022年10月20日
  • 行为识别数据集汇总[通俗易懂]

    行为识别数据集汇总[通俗易懂]工欲善其事,必先利其器http://www.cs.utexas.edu/~chaoyeh/web_action_data/dataset_list.html,此链接内容更全,可惜整理完后发现的。1.TheKTHDataset(2004)KTH数据集于2004年的发布,是计算机视觉领域的一个里程碑。此后,许多新的数据库陆续发布。数据库包括在4个不同场景下25个人完成的6…

  • Java 链表结点插入

    Java 链表结点插入PS:链表是一种数据结构,而数据结构就是一种存放数据的方式。为什么需要链表?我们知道,数组也可以存储数据,那么为什么还需要链表呢?接下来,我们来看看数组和链表的区别:1、数组就像身上编了号站成一排的人,要找第10个人很容易,根据人身上的编号很快就能找到。但插入、删除慢,要往某个位置插入或删除一个人时,后面的人身上的编号都要变。当然,加入或删除的人始终末尾的也快。2、链表就…

  • java线程与cpu线程_坑惨了什么意思

    java线程与cpu线程_坑惨了什么意思在java中,线程间的通信可以使用wait、notify、notifyAll来进行控制。从名字就可以看出来这3个方法都是跟多线程相关的,但是可能让你感到吃惊的是:这3个方法并不是Thread类或者是Runnable接口的方法,而是Object类的3个本地方法。下图是我总结的Java资料,想要资料的话请点795983544暗号CSDN。其实要理解这一点也并不难,调用一个Object的wait与notify/notifyAll的时候,必须保证调用代码对该Object是同步的,也就是说必须在作用等.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号