运维神器|一键自动扫描网络拓扑,topology-scanner使用指南
发布作者:微思网络 发布时间:2026-06-11 浏览量:0次

做网络运维、机房管理的小伙伴,大概率都被网络拓扑梳理折磨过。
手动画图耗时费力、设备互联关系容易遗漏、网络迭代后拓扑图严重滞后,复杂网络故障排查更是无从下手。
今天给大家分享一款免费开源、轻量高效的网络拓扑自动扫描工具——topology-scanner。无需人工逐一摸排,自动发现全网设备、识别设备信息、梳理互联关系,一键生成可视化拓扑图,完美适配中小型局域网及复杂层级网络,大幅降低运维工作量✨

【免费下载】topology-scanner.jar

关注微思公众号,在消息对话框回复“topology”即可下载

Topology-Scanner是WeOps团队免费开放的一个网络拓扑自动扫描模块,可以自动发现网络设备的类型、网络设备之间的互联关系

使用方法
java -jar ./topology-scanner.jar --config_path=./config/
拓扑发现算法
常规算法
常规算法即为 AFT 算法,是基于 AFT 建立链路。算法原理如下 : 由于在发现设备的过程中,设备的ip和所在的子网都会被记录下来。在确定拓扑时, 根据发现过程中记录下的每个子网,首先确定交换域,交换域的定义为:交换域建模为一棵无向树G=(D,E). D是交换域内所有结点(网络设备)的集合.E是设备端口之间的直接连接集合, S表示所有交换机的集合,H表示所有主机的集合,D=S+H.(路由器算作主机)。最终对交换域进行合并,根据AFT 建立链路。参数运行配置中如果开启了使用ARP表,那还会再根据ARP 表来补充未发现的链路。 在发现过程中需要获取或扫描网络设备上的以下几个表: IPAdress 表,IFTable 表, ARP 表, FDB 表。
CDP算法
适用于支持CDP协议的网络设备,如思科设备。是基于 CDP 协议来发现链路。CDP 算法原理如下 :根据 CDP 协议从所有发现出来的设备中选出具有CDP 协议功能的设备,这是通过snmp 探测器去采集设备上的CDP 表,由此来判断是否有CDP协议能力。在利用CDP发现链路时,不需要只有路由、路由交换才具有的特征, 而且只能发现网络设备之间的连接。通过CDP表和IFTabel 表结合来确定设备的拓扑链路。由于CDP 的局限性,对拓扑发现结果精确度会影响。 在发现过程中需要获取或扫描网络设备上的以下几个表: CDP 表, IFTable 表。
桥接算法
桥接算法是根据网络设备上的多个表相结合的方式来发现链路。桥接算法比其它的几个拓扑算法要复杂一些,参与计算的表要多。在发现的所有设备中,首先根据网络设备的 FDB 表来定义域,在划分好多个域后,确定域内的设备的连接,结合 FDB 表,IFTable 表、IPAdress 表 、basePortTable表 确定设备之间的转发与交换路径。通过STP 表生成一个无环有向图,即最终的拓扑链路。 在发现过程中需要获取或扫描网络设备上的以下几个表: basePortTable 表, STP 表, FDB 表,IPAdress 表, IFTable 表。
LLDP 算法
LLDP 算法是根据 LLDP 表来确定网络设备的链路。算法原理如下 : 从发现的所有设备中筛选出具有 LLDP 功能的设备。这步是通过 snmp 探测器获取 设备上的 LLDP 表来判断的。由于具有LLDP 协议的只能是交换机或路由器等网络设备,像防火墙,主机这种类型的设备如果没有开启LLDP协议,是不参与拓扑计算的。通过LLDP 表和 IFTable 表结合,来确定设备的拓扑。 在发现过程中需要获取或扫描网络设备上的以下几个表: LLDP 表 , IFTable 表。
配置说明
拓扑发现请求参数文件(request.json)
ips
[全网发现] 模式时,为必填项。核心设备的ip, 多个ip 用逗号隔开。range 参数选填,起过滤作用。eg: 192.168.1.0,192.168.2.0
[子网发现] 模式时,为选填项。子网ip地址和掩码,必须成对。可多个,逗号隔开。 若为子网发现, ips 参数和range 参数不能同时为空。详见子网发现方式。 eg: 192.168.1.0,255.255.255.0, 192.168.2.0,255.255.255.0
hop
搜索深度,必填
group
使用SNMP V2协议时必填,SNMP V2的团体名,多个团体名用逗号隔开 eg: public,Huawei-public 当使用SNMP V3协议时可不填
range
[全网发现] 模式时,为选填项。Ip 范围,起过滤作用,可以多对,每对之间用; 号分隔,由开始和结束组成。eg: 192.168.1.0,192.168.1.255;192.168.2.0,192.168.2.255
[子网发现] 模式时,为选填项。若发现方式为子网发现,ips 参数和range 参数不能同时为空。Ip 范围,相当于范围发现,与子网发现结果取并集。Ip范围可以多对,每对由开始和结束组成,每对之间用;号分隔,eg: 192.168.1.0,192.168.1.255;192.168.2.0,192.168.2.255
way
发现方式: 0-全网发现 1-子网发现
algory
发现算法:
0-常规算法
1-CDP算法
2-LLDP 算法
3-桥接算法
version
SNMP 版本号,
2-SNMP 版本1或2
3-SNMP 版本3
v3
当使用SNMP V1/V2版本时可不填,当使用V3时,可填写如下JSON

示例参数如下

拓扑发现运行的参数文件(discovery.properties)
| 参数 | 类型 | 说明 |
|---|---|---|
| discovery.pool.max | int | 拓扑发现线程池最大线程数,默认:256 |
| discovery.pool.min | int | 拓扑发现线程池最小线程数,默认:50 |
| discovery.pool.queue.size | int | 拓扑发现线程池队列,默认:500 |
| discovery.min.maskbit | int | 扫描的最小子网掩码位数,对子网扫描不起作用,默认:16 |
| discovery.ping.batch | int | Ping 批次大小 |
| discovery.ping.enable | bool | 使用snmp探测前是否使用ping 来初次过滤,默认:false |
| discovery.ping.delay | int | Ping 重试延迟时间,单位毫秒,默认:1000 |
| discovery.ping.retry | int | Ping 重试次数。默认:1 |
| discovery.device.timeout | int | 单个设备发现超时时间,单位分钟,默认:3 |
| link.distinct | bool | 两条设备之间如果存在多条链路,是否去重。默认:false |
| link.remove.cycle | bool | 设备之间链路,是否过滤掉环路,默认:true |
| link.use.arp | bool | 设备链路时,是否使用ARP 表建立链路。默认:false |
| link.cross.subnet | bool | 设备链路时,是否跨子网。默认:true |
| discovery.snmp.retry | int | Snmp 探测时,单次报文重试次数。默认:1 |
| discovery.snmp.timeout | int | Snmp 探测时,单次报文的超时时间。单位毫秒,默认:1500 |
| discovery.snmp.detect.retry.number | int | 单个ip 在snmp 探测失败时,重试次数,默认:2 |
设备oid 与设备类型字典文件(systemoid.xml/getterConfig.xml)
为了能更精确的采集网络设备上的各种表,特别是 FDB 表, 由于设备类型不同,FDB 表采集所用的 oid 也有差别。 通过外部 getterConfig.xml 文件来指定某种设备采集的SNMP 采集器。默认 getterConfig.xml 配置的getters 子节点为空。 getterConfig.xml 配置如下示例:

sysOid: 设备的oid name: 采集的SNMP 采集器。
可选的采集器如下:
思科
| 厂商 | 采集器 | 说明 |
|---|---|---|
| Cisco924Getter | 思科924型设备采集器 | |
| Cisco10700Getter | 思科10700型设备采集器 | |
| CiscoGetter | 思科设备通用采集器 |
华三
| 厂商 | 采集器 | 说明 |
|---|---|---|
| H3cS10508Getter | 华三 S10508 型设备采集器 | |
| H3CGetter | 华三设备通用采集器 |
华为
| 厂商 | 采集器 | 说明 |
|---|---|---|
| Huawei2300Getter | 华为2300 型设备采集器 | |
| Huawei3026cGetter | 华为3026c 型设备采集器 | |
| Huawei6500Getter | 华为 6500型设备采集器 | |
| Huawei6506Getter | 华为 6506 型设备采集器 | |
| Huawei8500Getter | 华为8500型设备采集器 | |
| Huawei9303Getter | 华为9303型设备采集器 | |
| HuaweiS2403hGetter | 华为S2403h 型设备采集器 | |
| HuaweiGetter | 华为设备通用采集器 |
输出结果说明
device
| 字段 | 字段 | 类型 | 说明 |
|---|---|---|---|
| id | string | 设备id,唯一标识符 | |
| centerX | float | 设备在拓扑图中的 x 坐标 | |
| centerY | float | 设备在拓扑图中的 y 坐标 | |
| ip | string | 设备ip | |
| devName | string | 设备名称 | |
| devFirstType | string | 设备一级类型 | |
| devSecondType | string | 设备二级类型 | |
| oid | string 设备系统 | oid | |
| hop | int | 搜索深度 |
link
| 字段 | 字段 | 类型 | 说明 |
|---|---|---|---|
| linkId | string | 链路向量id | |
| sx | float | 链路向量起始 x 坐标 | |
| sy | float | 链路向量起始 y 坐标 | |
| ex | float | 链路向量结束 x 坐标 | |
| ey | float | 链路向量结束 y 坐标 | |
| flinkId | string | 设备到设备的id | |
| deviceDestIfIdx | string | 目标设备接口索引 | |
| deviceSrcIfIdx | string | 源设备接口索引 | |
| deviceDestIfIdxName | string | 目标设备接口名称 | |
| deviceSrcIfIdxName | string | 源设备接口名称 | |
| startIp | string | 源设备ip | |
| endIp | string | 目标设备ip |
工具总结
topology-scanner作为一款免费开源、轻量高效、适配性极强的网络拓扑扫描工具,完美解决了传统拓扑梳理效率低、准确率差、更新不及时的痛点。
四种专属算法适配多场景网络,极简部署、一键自动化扫描可视化,不管是日常网络巡检、机房架构梳理,还是网络故障排查、资产盘点,都能极大解放运维人力。
网络运维、机房工程师必备工具,轻松实现全网架构可视化管理!
好课推荐
华为认证
华为认证是面向数字化时代构建的ICT人才培养与认证体系,致力于人才培养,助力产业繁荣。当前超过68万来自全球180多个国家和地区的各行业精英已经取得华为认证。经过十年发展,随着行业的认可度不断提高,如今全球每年超过10万名新学员通过考试获得华为认证,华为认证已是ICT行业含金量较高的认证之一。
课程详情
→ 都有开班!华为全系列认证!

华为认证 热门课:数通,云计算
数通 →HCIA →HCIP →HCIE
云计算 →HCIA →HCIP →HCIE
【试听课】→ | 上课视频合集
学习资料
→【资料领取】华为HCIA Datacom官方电子教材
→ 华为企业网络常用图标大全(附PPT下载)
→ 模拟器eNSP安装教程(附下载链接


