全平台网络路径跟踪工具全面指南:涵盖Windows/Linux/MacOS/ios/Android

一、前言

对于一些网络排障场景,需要借助各类网络排障工具来做一些基础类信息排障和信息收集,本文将从多平台讲述各类网络排障工具的安装及使用方法。

此文将会手机各大平台的主流网络探测工具,如果你对探测原理比较感兴趣,可以查阅笔者的此篇文章。

在测试过程中某些节点可能会返回*号,这是正常的,mtr、traceroute等路径跟踪工具都是根据递增TTL,来拿到每个沿途节点返回的Time-to-live exceeded(TTL耗尽,超过生存时间),从而在IP头部中拿到节点的IP地址;

除非此网关节点不响应任何信息(包括TTL耗尽),则用*表示,响应*并不代表节点不通,路由节点有QoS策略,对于优先级低的协议可以选择响应或者直接DROP,但并不影响它往后给你转发,只要TTL是够的依然会给你查路由转发,因此只需要关注最后一跳的质量。

二、安卓端

1.PingTools

PingTools为安卓端比较常见的网络探测工具,支持traceroute路由跟踪ping端口扫描whois查询等功能。

1)安装

在各手机厂商的应用市场基本可以搜索到,如果无法搜索到,可以在此下载。

2)使用

以路由跟踪为例,来到路由跟踪界面,点击右上角的设置选项:

模式可选UDP、ICMP,默认UDP模式,按需选择,并勾选“不解析主机名称”,防止IP被解析成域名。

保存后,trace到百度的域名为例:

如果是IP则填写IP即可,中间节点未响应并不表示真正意义上的超时,中间路由节点对于ICMP/UDP的QoS优先级不高或者节点本身禁ping状态,即使是通过TTL递增来发ICMP/UDP探测,对端如果静默不做任何TTL耗尽的响应,则会表现为未响应,但并不影响节点转发数据,因此只要看最新的跳数即可。

如上图,最新跳数为18,IP为:39.156.66.10,我们trace解析到的也是这个IP,说明已经到达目的端。

如果想显示更多中间节点提升准确率,可以尝试在设置里面把Ping次数设置高一点(一般2-3次就够)。

2.网络万用表

1)安装

在各手机厂商的应用市场基本可以搜索到,如果无法搜索到,可以在此下载。

主界面如下,支持MTRTraceroute端口扫描Ping探测等主流功能。

2)使用

以mtr和traceroute为例。

mtr

traceroute

经过的节点以及对应的域名都会展示。

3.Termux

前两种在安卓端已经基本够用,如果需要命令行版本,那么可以尝试下termux。

下载链接:https://github.com/termux/termux-app/releases/tag/v0.118.0

1)安装

GUI选择源:termux-change-repo

安装root源:

代码语言:shell
复制
pkg install root-repo

安装traceroute:

代码语言:shell
复制
pkg install traceroute

2)使用

①禁止反向解析(-n)
代码语言:shell
复制
traceroute -n <目标地址>  # -n 禁止将IP反解成域名

默认使用UDP协议跟踪。

②使用ICMP协议跟踪(-I)

使用ICMP协议跟踪,则可以使用-I(大写的i)参数:

代码语言:shell
复制
traceroute -n -I <目标地址>

一次没回显,或者很多*号可以多尝试几次:

带端口的测试需要root权限,不然无法有效进行TCP带端口的跟踪:

所以手机端在非root的情况下几乎没有任何APP能够实现带端口的trace。

三、ios端

以下ios端的路径跟踪工具全部在App Store免费下载,因此只介绍用法。

1.Best NetTools

1)traceroute

输入对端主机后,执行traceroute:

2)mtr

同理,输入目的主机后,执行MTR路径跟踪,将以ICMP协议进行路径跟踪:

2.iNetTools

选择路由轨迹功能,输入目的服务器即可:

3.Network Ping Lite

以traceroute为例,输入目的主机后Start即可:

四、Windows端

1.tracert

windows自带的路由追踪命令,打开DOS窗口后,直接执行即可

代码语言:shell
复制
tracert -d <目标地址># -d禁止反向解析

2.WinMtr

1)安装

为数不多的windows下可视化的路径追踪工具。

可在官网下载:http://winmtr.net/WinMTR-v092.zip

如无法打开,可点此链接下载,解压后即可运行。

2)使用

主界面参数说明:

选项这里只需要把反向解析的勾选去掉后,其它参数保持默认即可。

探测百度为例:

丢包指标只看最后一跳的Loss%即可,显示为0说明没有丢包。

3.tracetcp

1)安装

tracetcp:https://github.com/0xcafed00d/tracetcp/releases,如无法打开,可以[点此下载](https://ask.qcloudimg.com/draft/1155328/de8l0ceo2g.zip),或者[点此下载](https://data.linux-code.com/?dir=filelist/Software/tracetcp)。

winpcap(依赖环境,必须安装):https://www.winpcap.org/install/bin/WinPcap_4_1_3.exe,如无法打开,可[点此下载](https://data.linux-code.com/?dir=filelist/Software/tracetcp)。

winpcap双击安装,tracetcp解压即可。

解压后,在文件路径下,输入cmd回车:

即可打开DOS窗口,此路径下可直接调用tracetcp命令:

当然你把它解压后放到windows的环境变量目录(比如C:/Windows/system32)下,之后管理员身份运行cmd也能直接使用tracetcp,二者选其一即可。

2)使用

使用tracetcp -?帮助命令,可以看到各个参数含义以及示例:

代码语言:shell
复制
Examples:
    tracetcp www.microsoft.com:80 -m 60
    tracetcp post.sponge.com:smtp
    tracetcp 192.168.0.1 -n -t 500

这里只讲述带端口的TCP路径跟踪,其它用法根据参数说明使用即可。

①使用TCP指定端口进行路径跟踪
代码语言:shell
复制
tracetcp <目标IP>:<端口> -n # -n禁止反向解析,-n要加在后面,加在前面会报错
②指定探测次数

-p参数可以指定每个节点的探测次数,不指定默认为3次,比如指定5次可以是:

代码语言:shell
复制
tracetcp <目标IP>:<端口> -n -p 5

4.BestTrace

1)安装

下载链接:https://www.ipip.net/product/client.html

双击安装即可。

2)使用

①traceroute跟踪

以百度为例,目的主机如果填写的是域名并且返回了多个解析记录,会让你选择其中一个进行路径跟踪:

经过的路由节点的IP归属地信息需要去官网申请Token才能使用,无此类需求可忽略。

带端口的跟踪,只支持勾选TCP(80端口,IPv4),不支持指定其它协议和端口:

②MTR跟踪

打开Best Trace主界面,点击MTR:

填写目的主机后即可开始:

五、Linux端

1.traceroute

1)不加参数,默认使用UDP跟踪

代码语言:shell
复制
traceroute <目标主机>

加上 -n 参数可禁止反向解析,防止将IP反解成域名。

2)使用ICMP跟踪(-I)

加上-I(大写i)参数,则通过ping请求来探测:

代码语言:shell
复制
traceroute -I <目的主机>

3)使用TCP端口跟踪(-T/--tcp,-p)

-T或者--tcp指定协议为tcp,-p指定端口,-n禁止反解:

代码语言:shell
复制
traceroute -n -T -p <目的端口> <目的主机>

4)使用UDP端口跟踪(-U/--udp,-p)

-U--udp指定协议为udp,-p指定端口,-n禁止反解:

代码语言:shell
复制
traceroute -n -U -p <目的端口> <目的主机>

2.mtr

1)禁止反向解析(-n)

代码语言:shell
复制
mtr -n <目的主机>

2)输出结果(-r)

-r参数生成最终的结果,默认只探测10个包,结束后输出报告:

代码语言:shell
复制
mtr -n <目的主机>

如要指定包量,可以加上-c参数,比如探测100个包后输出报告:

代码语言:shell
复制
mtr -nr -c 100 <目的主机>

3)指定TCP端口跟踪(-T/--tcp,-P)

比如指定百度的443端口进行跟踪,并且输出报告:

代码语言:shell
复制
mtr -T -P 443 -nr www.baidu.com

4)指定UDP端口跟踪(-u/--udp,-P)

同理,指定UDP端口跟踪,可以是:

代码语言:shell
复制
mtr -u -P 80 -nr www.baidu.com

3.nexttrace

基于Golang开发的开源可视化路径跟踪工具,nexttrace的详细介绍,可参考笔者此篇文章。

六、MacOS端

1.mtr

1)安装

代码语言:shell
复制
brew install mtr

如果macOS没有安装brew命令,则需要先提前安装下brew:

代码语言:shell
复制
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2)使用

①禁止反向解析(-n)
代码语言:shell
复制
sudo mtr <目的主机> -n

没有指定协议,默认使用ICMP进行ping探测。

②输出统计结果(-r)

-r参数生成最终的结果,默认只探测10个包,结束后会输出报告:

代码语言:shell
复制
sudo mtr -nr <目的主机>
③指定TCP端口跟踪(--tcp,--port)

比如跟踪80端口:

代码语言:shell
复制
sudo mtr --tcp --port 80 -nr <目的主机>
④指定TCP端口跟踪(--udp,--port)

比如跟踪udp 53端口:

代码语言:shell
复制
mtr --udp -port 53 -nr <目的主机>

2.traceroute

无需安装,MacOS自带的工具。

1)不加任何参数

不加参数默认用UDP探测:

代码语言:shell
复制
traceroute <目的IP>

2)指定TCP端口跟踪

比如跟踪TCP 443端口:

代码语言:shell
复制
traceroute -P tcp -p 443 <目的主机>

3)指定UDP端口跟踪

比如跟踪UDP 53端口:

代码语言:shell
复制
traceroute -P udp -p 53 <目的主机>