路由追踪:traceroute/tcptraceroute

路由追踪:traceroute/tcptraceroute一.工作原理traceroute:IP路由过程中对数据包TTL(TimetoLive,存活时间)进行处理。当路由器收到一个IP包时,会修改IP包的TTL(及由此造成的头部检验和checksum变化)。每收到一个包,检查这个的TTL是否是0。如果是,表明这个包还没有到达目的地,而且剩余时间不多了,肯定是到不了目的地了。这样路由器就简单地丢弃这个包,并给源主机发送ICMP通知,说这个包已经…

大家好,又见面了,我是你们的朋友全栈君。

一.工作原理

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

 

三.常用参数

  -4 #强制使用ipv4地址 -6 #强制使用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), 30 hops max, 60 byte packets
 1  222.20.5.254  0.530 ms  0.495 ms  0.493 ms
 2  115.156.255.149  1.121 ms  1.253 ms  1.309 ms
 3  192.168.255.177  0.632 ms  0.753 ms  0.916 ms
 4  192.168.255.210  0.594 ms  0.762 ms  0.963 ms
 5  * 202.114.1.186  2.228 ms *
 6  202.112.53.81  3.614 ms  3.716 ms  3.869 ms
 7  * * *
 8  101.4.117.38  27.026 ms  26.956 ms  26.878 ms
 9  101.4.112.1  22.127 ms  22.487 ms  22.393 ms
10  101.4.113.117  24.541 ms  23.641 ms  22.407 ms
11  219.224.103.10  21.155 ms  21.234 ms  20.291 ms
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
………………
29  * * *
30  * * *

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

# traceroute -T -n www.baidu.com
traceroute to www.baidu.com (119.75.213.61), 30 hops max, 60 byte packets
 1  * * *
 2  115.156.255.149  0.561 ms  0.649 ms  0.767 ms
 3  192.168.255.177  0.660 ms  0.765 ms  0.839 ms
 4  192.168.255.210  0.640 ms  0.670 ms  0.720 ms
 5  * * *
 6  202.112.53.81  3.216 ms  2.826 ms  2.898 ms
 7  * * *
 8  101.4.117.38  27.082 ms  27.067 ms  27.049 ms
 9  101.4.112.1  20.844 ms  19.985 ms  19.928 ms
10  101.4.113.117  21.696 ms  20.031 ms  29.858 ms
11  219.224.103.10  23.393 ms  20.158 ms  20.552 ms
12  * * *
13  * * *
14  119.75.213.61  20.215 ms  20.114 ms  20.052 ms

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

 

转载于:https://www.cnblogs.com/sunshine-cat/p/8081974.html

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151507.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • tomcat出现乱码怎么办_tomcat输出日志乱码

    tomcat出现乱码怎么办_tomcat输出日志乱码1.打开tomcat如下位置:找到logging-properties文件,选择用代码编辑器打开(我这里选择用idea)2.在25-47行中把五个红框起来的UTF-8改为GB2312此时点击bin,目录下的startup.bat(window用户)或startup.sh(mac用户)启动tomcat,控制台的乱码问题解决。如果此时还没有解决乱码问题,需要1.windows+R打开运行,在运行框中输入regedit,进入注册表编辑器中2.如果没有Tomcat或者CodePag(1)

    2022年9月25日
    4
  • redis info命令详解

    redis info命令详解

    2021年9月14日
    49
  • 史上最全 Java 多线程面试题及答案「建议收藏」

    史上最全 Java 多线程面试题及答案「建议收藏」这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是所有的问题都会按照自己的理解回答一遍,不会去看网上的答案,因此可能有些问题讲的不对,能指正的希望大家不吝指教。1、多线程有什么用? 一个可能在很多人…

    2022年8月27日
    5
  • linux命令行与shell脚本编程大全和鸟哥的私房菜_linux进入命令行

    linux命令行与shell脚本编程大全和鸟哥的私房菜_linux进入命令行一、基本bashshell命令创建文件:touch链接文件:符号链接:是一个实实在在的文件,两个通过符号链接在一起的文件,彼此的内容并不相同。使用ln-s命令。硬链接:会创建独立的虚拟文件,其中包含了原始文件的信息及位置。但他们从根本上而言是同一个文件。原始文件必须事先存在,使用ln命令。查看文件类型:file查看整个文件:cat,more,less…

    2022年9月1日
    4
  • [新人向]MySQL和Navicat下载、安装及使用详细教程[通俗易懂]

    [新人向]MySQL和Navicat下载、安装及使用详细教程[通俗易懂]MySQL和Navicat下载和安装详细教程因为这些软件的安装很多都是纯英文,作为新手安装真的需要摸索好久,包括我自己,所以Pipi酱就把自己的经验分享给大家~MySQL的安装教程一、下载安装包链接:1.下载MySQL:https://dev.mysql.com/downloads/windows/installer/8.0.html这里我们直接下载第一个(24.4M),下载到任意目录即可。2、安装MySQL二、安装1、这里我们安装点击Yes2、选择Custom,然后Next3、

    2022年5月22日
    43
  • verilog代码转化电路图_门电路实现补码运算

    verilog代码转化电路图_门电路实现补码运算comp_conv.v://2022-1-19verilog学习//补码转换逻辑`timescale1ns/10ps;modulecomp_conv( a, a_comp );input[7:0] a;output[7:0] a_comp;//中间变量wire[6:0] b;//负数按位取反的幅度位(1位符号位+7位幅度位)wire[7:0] y;//负数的补码assign ..

    2025年12月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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