一.工作原理

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. U-Mail邮件群发如何过滤无效地址?

    U-Mail邮件群发平台可以自动过滤掉无效和重复地址,过滤效果如下图 U-Mail邮件群发平台会将客户已经确认好是无效地址的加入无效地址库,下次再导入改无效地址就直接拒绝.邮件格式不正确的也会直接过滤 ...

  2. MQ--API总结

    研究MQ很长时间了, 每个类,方法,都查了很长时间,在此总结一下! Java编写访问MQ的程序 1.MQQueueManager―――队列管理器访问类  常用方法: public MQQueueMan ...

  3. Java -- Arrays.asList()方法

    Arrays.asList() 是将数组作为列表 问题来源于: public class Test { public static void main(String[] args) { int[] a ...

  4. 【转】2013 PHP技术峰会《Bug Free的PHP开发实践分享》摘录

    要想代码写的好,前提配置做的好 error_reporting  =  E_ALL | E_STRICT display_errors = 测试机设置为 On,生产机设置为 Off display_s ...

  5. 如何查看Windows下端口占用情况

    开始---->运行---->cmd,或者是window+R组合键,调出命令窗口  输入命令:netstat -ano,列出所有端口的情况.在列表中我们观察被占用的端口,比如是49157,首 ...

  6. C#POST 支付宝/微信回调接口

    一般支付宝/微信的回调接口都会返回xml格式,下面是调用类似这种接口的办法: public async Task<string> GetData() { string requestUrl ...

  7. 从C语言的volatile关键字,了解C#的volatile机制(转载)

    C#中有一个关键字volatile,一直不太明白到底什么时候才用它,只知道在多线程操作同一个变量的时候要使用volatile关键字,下面看到了一篇C语言关于volatile关键字的介绍,写的很不错,其 ...

  8. 如何在jsp页面获取系统时间

    <%@ page import="java.util.*"%> //获取系统时间必须导入的 <%@ page import="java.text.*&q ...

  9. php分页方法

    $page_on=15;//定义每页显示数 $pageNum=$_GET['pageNum']; //当前页数 $result = mysql_query("SELECT * FROM ne ...

  10. MyBatis之Mapper XML 文件详解(三)-Result Maps

    resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC 代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事 情 ...