全球实时:深度剖析轻量且强大的网络路径追踪工具NextTrace - 路径探测的囊中利器
2023-04-15 16:22:51 来源:腾讯云
一、前言
NextTrace为一款轻量化的开源可视化路由跟踪工具,目前支持ICMP、TCP、UDP等多种协议,并通过地址库显示每一跳节点的AS号、归属地情况,并通过路由可视化生成地图路径标注,光是这几样功能可谓对于网络故障定位起到非常大的作用,不排除后续会纳入到各个Linux发行版软件源中。
截止到目前(2023.4),最新版本为v1.1.3,本文将从各个参数讲解NextTrace用法。
【资料图】
二、细究探测原理
探测原理很简单,通过TTL=1一直往上递增,每经过一跳,TTL减1,TTL耗尽后对端网关触发Time-to-live exceeded(TTL耗尽,超过生存时间)就能拿到节点的IP地址,除非此网关节点不响应任何信息,则用*表示,响应*并不代表节点不通,路由节点有QoS策略,对于优先级低的协议可以选择响应或者直接DROP,但并不影响它往后给你转发,只要TTL是够的依然会给你查路由转发。
TTL是IP头部特有字段,RFC791对于IP头部格式的定义如下:
RFC792对于Time-to-live exceeded(ICMP TYPE=11,CODE=0)的定义:如果处理数据包的网关发现TTL字段为零,它必须丢弃该数据包, 网关也可以通过time exceeded消息通知源主机,
通过以上说明,你应该知道怎么手动拿到每一跳的地址,没错,就是指定TTL值,不管是ICMP、TCP、UDP都能指定TTL,让它从1开始递增,只要属于IP协议就行,都会有TTL头部字段,把TTL从1依次递增就能拿到每一跳的地址,比如下面的示例:
for ttl in 1 2 3;do ping -t $ttl 1.1.1.1 -c 1;donefor ttl in 1 2 3;do nping --tcp --ttl $ttl -c 1 -p 80 qq.com;done
上面的示例中,不管是ping测试还是TCP测试,从TTL=1 递增到TTL=3,拿到了三个节点返回的TTL exceeded。
估计很多人会问到,“我发的是TCP/UDP请求,为什么给我返回ICMP协议的TTL耗尽?”,在这里统一回复下:ICMP具备承载网络状态信息的能力,不同ICMP TYPE + CODE组合表示不同状态信息,具体可参考维基百科的ICMP状态码表,比如ttl exceeded,对应的是ICMP TYPE=11,CODE=0:
三、安装
1.Linux
一键安装脚本:
bash <(curl -Ls https://raw.githubusercontent.com/sjlleo/nexttrace/main/nt_install.sh)
GHPROXY 镜像(国内使用):
bash <(curl -Ls https://ghproxy.com/https://raw.githubusercontent.com/sjlleo/nexttrace/main/nt_install.sh)
2.Windows
在 Release页面 下载编译后的二进制文件,在CMD内执行。
3.macOS
brew tap xgadget-lab/nexttrace && brew install nexttrace
四、参数详解
1.无参数追踪
没有明确指定协议的情况下,NextTrace默认会使用ICMP探测,同时支持IPv4、IPv6,比如测试到1.1.1.1的路径:
nexttrace 1.1.1.1
探测原理也很简单,通过TTL递增来拿到每一跳的地址,并默认通过地址库LeoMoeAPI拿到每个IP的AS号、运营商、归属地等信息。
当然也可以直接接域名,如果域名解析返回了多个记录,则会让你手动选取一个:
2.TCP模式路径追踪(-T/--tcp)
不接端口的情况下,默认探测80,可以通过-p指定端口:
nexttrace -T <目的地址> -p 443
很显然,即使是TCP,发往的目的IP从未变过,而是通过递增TTL值,拿到每个节点Time-to-live exceeded返回,最后汇总呈现数据。
3.UDP模式路径追踪(-U/--udp)
不接端口情况下,默认使用53端口探测,同理可通过-p指定端口,比如追踪目的地址2115端口:
nexttrace --udp <目的地址> -p 2115
同理,发送的是UDP探测,通过递增TTL来判断每一跳的节点。
这里服务端通过socat命令在目的端监听了udp 2115端口,收到什么则回显什么,可以看到NextTrace向目的端发送的是无意义的字符串:
4.FAST快速模式(-F/--fast-trace)
适合新手使用,可测试到北上广电信、移动、联通、教育网的trace路径,主要用于定位请求是否出网或者在哪断了,类似于一对多的拨测请求,同时也支持IPv4、IPv6 双栈。
默认ICMP模式:
nexttrace --fast-trace
TCP模式:
nexttrace -F -T
此模式下,当前版本暂不支持UDP。
5.指定端口(-p/--port)
四层才有端口的概念,因此TCP、UDP模式均支持使用此参数,前面的示例中也已经体现,不再重复赘述。
nexttrace -p <端口> <目的地址> --tcpnexttrace -p <端口> <目的地址> --udp
6.指定到每个节点的探测次数(-q/--queries)
不指定的情况下从TTL=1开始递增,每一跳默认探测三次:
通过-q参数可以指定探测次数,因此如果需要更精确的结果,建议适当增加探测次数,如果只希望快速得到结果,也可以适当缩小探测次数,一般默认三次足够了。
nexttrace <目标地址> -q 5 # 指定探测次数为五次
通过wireshark、tshark也能清晰观测到次数的变化,同时从NextTrace的输出结果来看,每个节点的耗时统计也增加到5次。
7.指定最大跳数(-m/-max-hops)
默认30,这里理解成指定最大TTL值更为恰当,因为TTL探测的初始值是可以通过--first参数指定的,不一定从1开始,如果不指定--first参数,则默认从第一个节点往下数N跳。
nexttrace -m 2 <目标地址> # 只跟踪前两跳
8.指定初始TTL值(-f/--first)
前面说过,ttl默认从1开始递增,如果只想看某几跳之后怎么走,比如忽略内网节点,这时候就能通过此参数来指定初始TTL值。
从TTL=3开始探测:
nexttrace -f 3 <目标地址>
可以看到从TTL=3开始递增探测,直接略过了内网网段,第一个外网节点113.87.48.1正好是出口公网运营商的网关。
同时可以配合-m参数,来获取某几跳之间的路径情况,比如从第三跳开始到第六跳可以是:
nexttrace -f 3 -m 6 <目标地址>
9.禁止反向解析(-n/--no-rdns)
防止将IP解析成域名,可以使用此参数。
nexttrace -n <目标地址>
比如下图示例,不加-n参数,1.1.1.1被解析成了域名,加了-n参数后,则没有出现域名。
1.1.1.1是CloudFlare的公共DNS,并且反向解析出来的域名提供web访问能力:
反向解析将会查找IP是否存在PTR记录,并呈现在nexttrace每个节点的输出结果上。
所以可想而知,如果不加-n参数,不光是给每个节点发探测请求,还随之附带PTR记录的DNS query,看是否存在域名的可能性,这将花费一部分不必要的时间,因此没有反向解析域名的需求下,强烈建议默认加上-n参数。
10.启用反向解析(-a/--always-rdns)
默认行为,从上面的抓包可知,NextTrace每次拿到节点后,都会发起PTR查询,-a参数只要查询到了就呈现在结果上:
没有特殊需求一般不建议使用此参数,只会影响探测速度。
11.指定IP数据库(-d/--data-provider )
可以是:IP.SB、IPInfo、IPInsight,、IP-API.com、Ip2region、IPInfoLocal、CHUNZHEN,默认为LeoMoeAPI。
其中ipinfo和IPInsight API对于免费版查询有频率限制,可从这些服务商自行购买服务以解除限制,如有需要可以 clone nexttrace项目添加其提供的token自行编译。TOKEN填写路径为ipgeo/tokens.go:
使用ipinfo的执行效果:
nexttrace -n -d ipinfo <目标地址> # 使用ipinfo IP数据库作为数据源,-n禁止反向解析
Ip2region在第一次执行nexttrace -d Ip2region
时会自动下载,也可自行下载并命名为 ip2region.db。
执行效果:
nexttrace -n -d ipinfo <目标地址> # 使用ip2region IP数据库作为数据源,-n禁止反向解析
纯真IP数据库默认使用http://127.0.0.1:2060作为查询接口,可以使用环境变量控制,比如指定纯正数据库API地址为本地2070端口:
export NEXTTRACE_CHUNZHENURL=http://127.0.0.1:2070
此方式需要搭建CHUNZHEN API提供服务,可参考此项目自行搭建,运行效果:
nexttrace -n -d chunzhen <目标地址> # 使用纯正IP数据库作为数据源,-n禁止反向解析
前面说过,不指定的情况下,默认是LeoMoeAPI作为数据源,可以修改环境变量来更改默认IP数据库,比如改成ipipinfo可以是:
export NEXTTRACE_DATAPROVIDER=ipinfo
想永久生效则写进~/.bashrc、/etc/profile等配置文件里。
当然你也可以修改源码后重新编译成二进制文件:
12.输出Router-Path路径(-P/--route-path)
此参数可详细显示ASN号路径走向。
nexttrace -nP <目标地址> # -n禁止反向解析,-P打印AS PATH走向,可以混合使用
13.表格形式输出结果(-t /--table)
nexttrace -t -n <目标地址> # -t表格形式输出,-n禁止反向解析
可以看到每个节点都有三次探测数据,前面说过这是默认行为,不要理解为回环。
如果觉得次数太多或者输出不友好,可以使用-q指定次数,比如每一跳只探测1次:
nexttrace -n -t -q 1 <目标地址> # -q 1每一跳只探测一次,-n禁止反向解析
14.经典输出(-c/--classic)
nexttrace -n -c -q 1 <目标地址> # -q 1每一跳只探测一次,-n禁止反向解析
输出结果有点类似BestTrace,较为简略。
15.禁用地图视图(-M/--map)
聪明的读者早已发现,上面的示例中,几乎每次输出都会附带一个MapTrace URL,这个地址将会在地图上标注每一跳的地址,能更直观看到路径走向,判断是否绕路。
首先来看看不禁用地图的展示效果
nexttrace -nP 2.16.150.1 #-n禁止反向解析,-P输出AS PATH走向
最后拿到了一个URL地址,浏览器访问这个地址:
默认为平铺视图,会在地图上绘制各个节点,行程一跳路径走向图,鼠标单击坐标点,可以看到节点IP和TTL延时等信息,鼠标右击则有放大、缩小、3D视角、启用/禁用 路由表显示、启用/禁用 二维码显示等功能:
禁用路由表展示后,更多节点将一览无余:
切换成3D视角则为地球视角:
如需禁用地图功能,使用-M参数即可
nexttrace -n -M <目标地址> # -n禁止反向解析,-M禁用地图
16.指定源地址探测(-s/--source)
一个系统上可能有多个网卡或IP地址,在多外网出口情况下,不同地址所走出口可能不一样(取决于内网有没有配置这些策略),使用此参数可指定某个固定IP作为源地址往外探测。
比如我的网卡上有两个内网IP,我想指定其中一个往外发包,可以是:
nexttrace -n -s 192.168.1.8 <目标地址>
17.指定网卡设备(-D/--dev)
如果系统有多张网卡,通过-D参数可选其中一个网卡作为出向。
nexttrace -n -D <网卡名> <目的IP>
而如果想指定网卡的某个内网IP,也能配合-s参数:
nexttrace -n -D <网卡名> -s <目的IP>
18.展示路由表信息(-R/--route)
数据源来自BGP.Tools官网,BGP.Tools提供了BGP路由追踪、AS路径分析、寻找最短路径、IP地址定位等多种功能,
nexttrace -n -R <目标地址>
将每一个节点的AS号以及所连接到的AS号信息全部展示,可以看到和bgp.tool查询的一致:
19.指定发包时间间隔(-z/--send-time)
默认为100ms的发包时间间隔,有些节点可能有频率限制,比如1分钟内只允许ping 3次,超过次数则DROP不返回任何报文(包括TTL耗尽的报文),NextTrace呈现上就是显示*号,不回显,但仍然给你转发数据包,这时候探测间隔起到了至关重要的作用。
比如设置发包速率为1000ms,可以是:
nexttrace -n -z 1000 <目标地址>
抓包可以看到每个发送包之间间隔为1s,符合预期。
20.指定每一组探测包的时间间隔(-i/--ttl-time)
前一个参数-z是指定每一个包之间的发包间隔,而-i是指定每一组(不同TTL为一个组)包的时间间隔,默认值500ms,不要搞混。
比如指定组之间的探测间隔为1s:
nexttrace -n -i 1000 <目标地址>
从抓包可以看到,因为没有指定-z参数,所以组内的包与包之间,探测间隔为100ms,而组与组之间(第三个包属于TTL=1的组,第四个包属于TTL=2的组)的探测间隔为1s,符合设定的1000ms。
结合上面学到的参数,以下几个参数可以同时混合搭配控制速率及频率,比如每个节点只探测一次,每个组内发包间隔为200ms,组间发包间隔为1s:
nexttrace -n -q 1 -z 200 -i 1000 <目标地址>
这些控制速率和频率的参数主要为了尽量让更多的节点得到回显,便于精准定位请求在哪个节点断连。
21.首选语言项(-g/--language)
指定输出使用的语言,可选:en、cn,即英文或中文,默认为中文。
nexttrace -n -g en <目标地址> #指定输出语言为英文
五、总结
以上所有参数可以混合搭配使用,鉴于不同使用场景,灵活变通,权当是种历练。鉴于NextTrace轻量、强大且全面的功能,日常使用上基本可以覆盖traceroute、mtr等工具的能力,且某些功能甚至能更胜一筹(譬如展示AS号、运营商归属地、地图路径等),如果条件允许的情况下,更建议迭代替换到NextTrace;如此这般,没有理由不把这一排错利器收入囊中。
关键词:
为你推荐
陕西两万五千吨市政桥梁完成“转身”
兰州40家A级旅游景区暂时关闭 开放时间暂定
北京丰台初步排查确诊病例密接、次密接258人 组织3万余
四川95岁战斗英雄何开仲有个心愿:想见见山东老战友
增产快!电力生产加速 能源供应偏紧将得到缓解
夏粮和早稻实现双增产 前三季度农林牧渔业增加值同比增
云南瑞丽江桥“守门员”:疫情防控不漏一人
“久病床前真孝子” 浙江男子照顾瘫痪母亲十载
黑龙江:儿童福利机构养育儿童保障标准提至1750元
山西新绛南关村民:因洪水离开家的日子
“十年磨一剑” 黑色矸石山终闻花果香
国家一级保护动物猎隼受伤 内蒙古警方送医救治
一罪犯强行脱逃下落不明 吉林省吉林监狱发布悬赏通告
涉案金额逾3000万 广西一“洗钱”团伙受审
青藏高原有雨雪天气 西南地区江南华南等地有明显降雨
湖南长沙县发现1例外省输入新冠肺炎确诊病例
青海互助:打造全国最大高原草莓种苗繁育中心
照片修复师:每修复一张照片越珍惜与亲人相处的时光
贵州率先在中国实现地质矿产勘查全过程数字化
浙江岱山通报一船沉没 2人获救11人失联
推荐内容
- 陕西两万五千吨市政桥梁完成“转身”
- 河北邯郸发生天然气泄漏事故致3人死亡
- 兰州40家A级旅游景区暂时关闭 开放时间暂定
- 湖北警方打掉两跨省“跑分”洗钱犯罪团伙
- 新冠肺炎疫情下如何保护孩子?张文宏建议设儿童专
- 海南儋州出现1例治愈后的境外输入病例复阳人员
- 男童脊柱侧弯压迫心肺 医生耗时7小时矫正
- 宁夏将开展18岁以上重点人群加强免疫接种工作
- 北京新增1例京外关联本地确诊病例 病例所在街道
- 北京丰台初步排查确诊病例密接、次密接258人 组
- 四川95岁战斗英雄何开仲有个心愿:想见见山东老战
- 增产快!电力生产加速 能源供应偏紧将得到缓解
- 夏粮和早稻实现双增产 前三季度农林牧渔业增加值
- 云南瑞丽江桥“守门员”:疫情防控不漏一人
- 宁夏吴忠核酸阳性者已确诊
- 宁夏吴忠市发现一例外省来吴核酸检测阳性人员
- “久病床前真孝子” 浙江男子照顾瘫痪母亲十载
- 内蒙古额济纳旗5名确诊病例行动轨迹:在同一饭店
- 北京疾控:近期去过这些地方的相关人员请主动报备
- 北京新增1例京外关联输入本地确诊病例
- 增强为民服务能力——做群众最盼事 解群众最难题
- 魏复盛:干一些平凡的实事
- 中缅边境畹町海关查获涉嫌走私海马干4381尾
- 黑龙江:儿童福利机构养育儿童保障标准提至1750元
- 山西新绛南关村民:因洪水离开家的日子
- “十年磨一剑” 黑色矸石山终闻花果香
- 适老化的游戏准备好了吗?电子游戏别忽视老年人
- 国家一级保护动物猎隼受伤 内蒙古警方送医救治
- 西安鄠邑发布2名密接者活动轨迹
- 宁夏吴忠发现一例外省来吴核酸检测阳性人员
- 上海籍阳性夫妻内蒙古行程涉及3个景区、1个民宿、
- 内蒙古额济纳旗启动IV级应急响应 排查出密接者197人
- 内蒙古二连浩特市两地调整为中风险地区
- 泥若二审宣判来了 知名游戏主播山泥若被判刑3年
- 河北邯郸发生天然气泄漏 3人窒息死亡
- 北京丰台报告1例甘肃来京人员新冠病毒核酸检测阳性
- 内蒙古二连浩特两个社区调整为中风险地区
- 一罪犯强行脱逃下落不明 吉林省吉林监狱发布悬赏
- 兰州6人核酸检测呈阳性 主城区局地调整为中风险区
- 涉案金额逾3000万 广西一“洗钱”团伙受审
油气
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
经济
-
NextTrace为一款轻量化的开源可视化路由跟踪工具,目前支持ICMP、TCP、UDP等多种协议,并通过地址库显示每一跳节点的AS号、归属地情况,并通过
-
想必现在有很多小伙伴对于企业推广方式方面的知识都比较想要了解,那么今天小好小编就为大家收集了一些关于企业推广方式方面的知
-
开奖回顾:双色球第2023039期期(上周星期日)奖号为020309131928+09,其中红球号码遗漏期数分别为:2周、2周、1周、0周、0周、4周,遗漏总期
-
今天(4月14日)下午,桂林气象台发布最新消息:明后两天(4月15日至16日),桂林市区的天气将一改阴雨绵绵的“颓势”,迎来多云间晴的好天气
-
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可