一.工作原理

traceroute:IP路由过程中对数据包TTL(Time to Live,存活时间)进行处理。当路由器收到一个IP包时,会修改IP包的TTL(及由此造成的头部检验和checksum变化)。每收到一个包,检查这个 的TTL是否是0。如果是,表明这个包还没有到达目的地,而且剩余时间不多了,肯定是到不了目的地了。这样路由器就简单地丢弃这个包,并给源主机发送 ICMP通知,说这个包已经超时了。ICMP的通知信息里包含当前路由器发送时所用的IP。这样就可以通过构造数据包,来间接检查到达一个主机时经过了哪些路由。一开始发送一个TTL为1的包,这样到达第一个路由器的时候就已经超时了,第一个路由器就发通知说包超时,这样就可以记录下 所经过的第一个路由器的IP。然后TTL加1,安全通过第一个路由器,而第二个路由器的的处理与第一个相同,丢包,发通知说包超时了,这样记录下第二个路 由器IP,由此可以一直进行下去,直到这个数据包到达目标主机,由此打印出所有经过的路由器。

tcptraceroute:现代网络广泛使用防火墙,导致传统路由跟踪工具发出的(ICMP应答(ICMP echo)或UDP)数据包都被过滤掉了,所以无法进行完整的路由跟踪。尽管如此,许多情况下,防火墙会准许TCP数据包通过防火墙到达指定端口,这些端口是主机内防火墙背后的一些程序和外界连接用的。通过发送TCP SYN数据包来代替UDP或者ICMP应答数据包,tcptraceroute可以穿透大多数防火墙。

二.命令格式

 #traceroute [ -46dFITnreAUDV ] [ -f first_ttl ] [ -g gate,... ] [ -i device ] [ -m max_ttl ] [ -N squeries ] [ -p port ] [ -t tos ] [ -l flow_label ] [ -w MAX,HERE,NEAR ] [ -q nqueries ] [ -s src_addr ] [ -z sendwait ] [ --fwmark=num ] host [ packetlen ]

其中traceroute -T等效于tcptraceroute

三.常用参数

  -                     #强制使用ipv4地址
- #强制使用ipv6地址
-d #允许套接字层的调试
-F #不要对数据包进行拆分
-f first_ttl #从指定的跳数开始,而不是从1开始
-g gate,... #设置指定路由路径,ipv4协议最多设置8个,ipv6协议最多设置127个
-I #使用ICMP ECHO进行探测
-T #使用TCP SYN包进行探测,等同于tcptraceroute,默认端口是80
-i device #指定网卡设备
-m max_ttl #设置最大跳数,即最大TTL值,默认为30
-N squeries #指定同时发送的探测包数量,默认是16
-n #不要进行域名解析,以点分十进制形式显示地址
-p port #设置目的端口,UDP和ICMP端口值会增长,TCP不会改变
-t tos --tos=tos #设置ipv4的服务类型或者ipv6的通信流类别
-l flow_label #给ipv6数据包添加flow_label来使其被路由器特殊处理
-w MAX,HERE,NEAR # 设置超时,HERE为相同路由器等待次数(默认3次),NEAR为下一跳路由等待次数(默认10次),MAX为超时时间(默认5秒)
-q nqueries #设置每一跳发送的数据包量,默认是3个
-r #跳过普通的路由表,直接将数据包发送到远程主机
-s source_addr #设置探测包的来源IP地址
-z sendwait #设置探测包间隔,默认为0,不超过10是毫秒单位,超过10是秒单位
-e #展示ICMP扩展,包括多协议标签交换
-A #打印AS-PATH(BGP协议中的路径属性)
-M name #使用指定的模块进行探测(内建或者拓展的)
-O OPTS,... #使用多个指定的模块,用逗号隔开
--sport=num #指定源端口
--fwmark=num #给数据包设置防火墙标记
-U --udp #使用指定的UDP端口,默认是53
-UL #使用轻量级用户数据包协议来探测,默认端口是53
-D --dccp #使用数据包拥塞控制协议来探测(默认端口是33434)
-P prot #使用未经封装指定协议数据包来探测
--mtu #发现追踪路径上的最大传输单元(数据帧数据部分最大长度)
--back #打印返回路径的hop(路由跳),如果看起来跟去的方向的不一样
-V #打印版本信息并退出
--help #寻求帮助并且退出
Arguments: #参数
host #需要探测的主机
packetlen #设置包长度,默认是40bytes

四.实践

首先使用traceroute进行探测

#traceroute  -n www.baidu.com
traceroute to www.baidu.com (119.75.216.20), hops max, byte packets
222.20.5.254 0.530 ms 0.495 ms 0.493 ms
115.156.255.149 1.121 ms 1.253 ms 1.309 ms
192.168.255.177 0.632 ms 0.753 ms 0.916 ms
192.168.255.210 0.594 ms 0.762 ms 0.963 ms
* 202.114.1.186 2.228 ms *
202.112.53.81 3.614 ms 3.716 ms 3.869 ms
* * *
101.4.117.38 27.026 ms 26.956 ms 26.878 ms
101.4.112.1 22.127 ms 22.487 ms 22.393 ms
101.4.113.117 24.541 ms 23.641 ms 22.407 ms
219.224.103.10 21.155 ms 21.234 ms 20.291 ms
* * *
* * *
* * *
* * *
* * *
………………
* * *
* * *

可以看到数据包并没有到达指定主机,而被过滤了,再使用tcptraceroute

# traceroute -T -n www.baidu.com
traceroute to www.baidu.com (119.75.213.61), hops max, byte packets
* * *
115.156.255.149 0.561 ms 0.649 ms 0.767 ms
192.168.255.177 0.660 ms 0.765 ms 0.839 ms
192.168.255.210 0.640 ms 0.670 ms 0.720 ms
* * *
202.112.53.81 3.216 ms 2.826 ms 2.898 ms
* * *
101.4.117.38 27.082 ms 27.067 ms 27.049 ms
101.4.112.1 20.844 ms 19.985 ms 19.928 ms
101.4.113.117 21.696 ms 20.031 ms 29.858 ms
219.224.103.10 23.393 ms 20.158 ms 20.552 ms
* * *
* * *
119.75.213.61 20.215 ms 20.114 ms 20.052 ms

可以看到数据包到达了目的主机,这里我们使用traceroute -T 。这和tcptraceroute是等效的。使用tcptraceroute可以有效的穿透防火墙,从而到达目的主机

路由追踪:traceroute/tcptraceroute的更多相关文章

  1. Traceroute(路由追踪)

    Traceroute的实现有两种: 基于UDP实现 traceroute向目的主机发送一系列普通IP数据报,但每个数据报携带一个不可达UDP端口号的UDP报文,TTL分别为1,2,3...TTL过期时 ...

  2. linux route命令的使用详解 添加永久静态路由 tracert traceroute

    linux route命令的使用详解 添加永久静态路由  tracert  traceroute route -n    Linuxroute  print  Windows traceroute  ...

  3. Traceroute(路由追踪)的原理及实现

    现实世界中的网络是由无数的计算机和路由器组成的一张的大网,应用的数据包在发送到服务器之前都要经过层层的路由转发.而Traceroute是一种常规的网络分析工具,用来定位到目标主机之间的所有路由器 原理 ...

  4. tracteroute路由追踪

    traceroute 跟踪数据包到达网络主机所经过的路由工具: 是用来发出数据包的主机到目标主机之间所经过的网关的工具.traceroute 的原理是试图以最小的TTL发出探测包来跟踪数据包到达目标主 ...

  5. Centos-跟踪数据传输路由状态-traceroute

    traceroute 显示网卡数据包传输到指定主机的路径信息,追踪数据传输路由状况,默认数据包大小38字节 相关选项 -i   使用指定网络接口发送数据 -n 使用IP而不使用主机名 -v 显示命令的 ...

  6. Delphi用Socket API实现路由追踪

    Windows自带的Tracert是向远程主机发送ICMP包进行追踪,但是目前很多主机关闭了ICMP答复,这个工具不太好使了~~~~~原理咱知道,正规的Trace不就是发送TTL依次递增的UDP包吗? ...

  7. Python—路由追踪(并生成追踪图片)

    需要先安装两个包 [root@localhost ~]# yum install graphviz // 为了使用dot命令 [root@localhost ~]# yum install Image ...

  8. 边缘节点 如何判断CDN的预热任务是否执行完成刷新 路由追踪 近期最少使用算法

    阿里云内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络.阿里云CDN分担源站压力,避免网络拥塞, ...

  9. python利用scapy模块写一个TCP路由追踪和扫描存活IP的脚本

    前言: 没有前言 0x01 from scapy.all import * import sys from socket import * import os from threading impor ...

随机推荐

  1. web服务器、app(应用)服务器、DB后端性能瓶颈和分析

    性能测试day07_性能瓶颈和分析 https://www.cnblogs.com/leixiaobai/p/9463748.html 其实如果之前都做的很到位的话,那么再加上APM工具(dynaTr ...

  2. Intellij IDEA 格式化代码

  3. 智能机器人“小昆”的实现(五)MainActivty的实现及项目结束

    好了,一切准备工作都完成了,下面我们就可以真正的编写MainActivity了.在MainActivity中,我们要为ListView设定适配器,并为发送按钮设定点击事件.我们的逻辑就是点击发送按钮, ...

  4. IO流输入输出流,字符字节流

    一.流 1.流的概念 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. ...

  5. The transaction log for database 'XXX' is full due to 'ACTIVE_TRANSACTION'.

    Msg 9002, Level 17, State 4, Line 4The transaction log for database 'Test' is full due to 'ACTIVE_TR ...

  6. HDU 6467 简单数学题 【递推公式 && O(1)优化乘法】(广东工业大学第十四届程序设计竞赛)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6467 简单数学题 Time Limit: 4000/2000 MS (Java/Others)    M ...

  7. 3springboot:springboot配置文件(配置文件、YAML、属性文件值注入<@Value、@ConfigurationProperties、@PropertySource,@ImportResource、@Bean>)

    1.配置文件: springboot默认使用一个全局配置文件 配置文件名是固定的   配置文件有两种(开头均是application,主要是文件的后缀): ->application.prope ...

  8. Google Map中的瓦片

    一.墨卡托投影google map使用的是EPSG:900913标准墨卡托投影(等角圆术地图投影)y = R*ln(tan(pi/4 + a/2))x = R*b当y等于piR时,投影图正好为一个正方 ...

  9. ringMVC——redirect重定向跳转传值

    spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示.     首先先来介绍一下不带参数的重定向:    ...

  10. PAT——1005. 继续(3n+1)猜想 (25)

    卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数.例如对n=3进行验证的时候, ...