VLOOKUP 救不了资产台账: 我把IT资产台账匹配写成了个 exe程序
原创
Attacker0824
Attacker0824
Attacker安全
2026年10月16日 15:54
北京
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
2026
收藏+关注,分享不迷路!
Attacker安全
专注于网络安全技术与工具分享
2026期待您的关注
SHENGMING
声明
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号团队不为此承担任何责任。
01
前言
2026·INVITATION
先说个每个做安全运营的人都遇到过的场景。
态势感知平台上弹出一条告警:10.0.0.1 存在高危漏洞,限期整改。你点开详情,IP、端口、漏洞编号、风险等级一应俱全,唯独缺一个信息——这台机器是谁的系统。
没有这个信息,工单就派不出去。发给运维,运维说不是我管的;发给业务,业务说我不知道这是啥。一条告警在群里转三圈,最后回到你这儿:先查一下这个 IP 属于哪个系统。
而\"查一下\"这三个字,意味着你要打开两份表:一份是资产台账,扫描器探出来的,全是 IP、端口、操作系统、漏洞;另一份是资产清单,运维维护的,记录每个 IP 属于哪个业务系统、归谁管。把清单里的系统名称对回台账,告警才能落到人头上。
两百行以内,Ctrl+F 加复制粘贴,半小时搞定。后来台账变成上千行,资产清单还被拆成十几个 sheet,每个 sheet 的「IP地址」列位置还不一样——手工对一天,眼睛先瞎,人先废。
VLOOKUP 到底在哪一步崩掉的
很多人第一反应是:这不就是 VLOOKUP 吗?理想情况下是的。但真实数据从来不理想:
| 真实数据长什么样 | VLOOKUP 的表现 | 工具的处理 |
|---|---|---|
| 一个单元格塞了五六个 IP,换行或顿号隔开 | 只能匹配整格,必然 #N/A | 拆成多个 IP 逐个查,命中多个用顿号拼起来 |
| 单元格直接写 IP 段:10.0.0.1-48 | 无解,纯文本 | 展开成 46、47、48 分别比对 |
| 表头上面压着两行标题说明 | 查找区域错位,结果全错 | 自动扫前 12 行,挑出最像表头的那行 |
| 同一 IP 在不同 sheet 里叫法不一样 | 跨表查找要手写十几次 | 每个 sheet 按表头名各自定位列 |
| 全角字符、前后空格:10.0.0.1 | 字符串不相等,匹配失败 | 比对前全角转半角 + 去首尾空白 |
| 清单拆成十几个 sheet,列顺序各不相同 | 每个 sheet 写一遍公式 | 选「全部工作表」,列位置差异无所谓 |
前四条是硬伤——不是公式写得不够巧,是数据结构压根不满足 VLOOKUP 的前提:一格一值、表头在第一行、单一查找区域。既然前提不成立,就别硬套公式了。
02工具分享
2026·INVITATION
工具速览
| 名称 | IT资产台账匹配工具 v3.0 |
| 形态 | Windows 桌面程序(图形界面)+ 命令行模式,单文件 exe 约 19MB |
| 技术栈 | Python 3.13 + openpyxl + tkinter(GUI 用标准库,不引第三方 UI 框架) |
| 核心能力 | 台账某一列 → 比对资产清单 → 命中后取指定列 → 写回台账 |
| 匹配模式 | 智能 / 仅 IP / 整格精确 / 按分隔符拆分,四种 |
| 资产清单 | 支持多工作表,各 sheet 按表头名独立定位列 |
| 输出 | 另存为新文件,只写回填列,其余内容与格式原样保留 |
怎么用
窗口分上下两部分:上面三张配置卡,下面是匹配结果的台账表格。
- ① 待匹配台账
——要被回填的文件。选文件、选 sheet、确认表头在第几行(默认第 1 行,程序会自己扫前 12 行找),再指定\"源列\",一般是「IP地址」。
* ② 资产清单
——提供匹配依据的文件。指定\"查找列\"和\"返回列\"(命中后取哪一列的值)。工作表默认「全部工作表」,所有 sheet 都翻一遍。
* ③ 输出设置
——回填到哪一列(可选「新建列…」)、用哪种匹配模式、没匹配上时填什么。
点开始匹配后,下方表格显示匹配结果:绿点已匹配,红点未匹配,可上下左右滚动核对。确认后点导出最终台账另存新文件——不会覆盖原文件。
| 匹配模式 | 干什么 | 什么时候用 |
|---|---|---|
| 智能 | 有 IP 就按 IP 比对,没有就整格比对 | 不确定数据长什么样,先用这个 |
| 仅提取 IP | 只认 IP,其他内容忽略 | 列里混了主机名、备注、端口 |
| 整格精确 | 两边完全一样才算命中 | 资产编号、MAC 地址这类不变形的值 |
| 按分隔符拆分 | 按分隔符切开后逐个比对 | 域名列表、端口列表 |
「按分隔符拆分」识别的分隔符:换行、制表符、逗号、分号、顿号、斜杠、竖线、空格,中英文符号都认。
六个值得说的工程细节
① 一格多 IP:拆开查,拼回来
192.168.5.9、10.0.0.1 会被拆成两个 IP 分别查清单,都命中就用顿号拼起来,比如\"对外门户网站、OA办公系统\"。拼接时做了去重保序——同一个 IP 在多个 sheet 都登记了,结果里也只出现一次。
② IP 段展开:只认末段递增
10.0.0.1-48 展开成 46、47、48,也支持完整写法 10.0.0.1``-10.0.0.48,分隔符 - ~ — 至 到 中英文都认。但有两条硬约束,是刻意加的:
- 前三段必须相同且末段递增
10.0.0.46-10.0.0.5 这种跨段写法不展开,避免生成一大堆根本不存在的 IP;
* 末段上限 255
,展开前逐段校验数值合法性,防止把 999.1.1.1 这种脏数据当 IP 用。
另外明确不支持 CIDR(10.0.0.0/24),不做网段包含判断。原因很实在:台账里的 IP 是具体的点,清单里的 CIDR 是范围,要做包含判断就得处理掩码运算和优先级,而实际业务里这种情况极少。不做,就不会误判。
③ 表头识别:前 12 行打分
很多台账第一行不是表头,上面压着标题、统计口径、导出时间。程序的做法是扫前 12 行逐行打分:
score = 命中提示词的个数 + 非空单元格数 / 100
提示词是一张经验表:IP、序号、主机名、操作系统、涉及业务系统、开放端口、域名……命中一个加一分。那个 filled / 100 是刻意的——只在分数打平时起作用,让\"表头词命中数相同但列更全\"的那行胜出,避免它喧宾夺主变成主要判据。主判据永远是语义,副判据才是形态。
④ 多 sheet 查找:按名字定位,不按位置
选「全部工作表」时,每个 sheet 各自按表头名定位列——第 2 列和第 5 列都能找到,列位置差异完全没关系。但有个前提:表头名得一致,一个叫「IP地址」一个叫「IP」,只会命中其中一个。定位时先精确匹配、再模糊匹配(候选名是否为表头名的子串),这个顺序不能反——反了的话「IP」会先命中「IP地址备注」这种列。
⑤ 回填列:识别不到就新建,绝不乱填
这是我觉得最该保守的一处。回填列候选关键词按\"最具体到最宽松\"排列:涉及业务系统/设备 → 涉及业务系统 → 所属业务系统 → 业务系统 → 系统名称。
一个都没命中时,返回 None,程序改走新建列——而不是退而求其次填第一列。
代码里这个开关叫 fallback\_first=False。因为填错列的代价太大:上千行台账,第一列往往是「序号」,把系统名称填进序号列,整列数据报废,而在导出的 Excel 里看不出来,等到有人排序才炸。
宁可多一步手工指定,不可自动填错一格。这是处理业务数据时的一条铁律。
⑥ 导出:只写回填列
导出时重新加载原文件,只往回填列写值(新建列时额外写个表头)然后另存。好处是原文件的格式、公式、批注、其他 sheet 全部原样保留。
命令行:给流程用的批量模式
IT资产匹配工具.exe --cli 台账.xlsx 资产清单.xlsx 输出.xlsx
第三个参数可省略,默认在台账同目录生成 台账名_已匹配_时间戳.xlsx。
有一点要注意:exe 是按无控制台方式打包的,命令行模式下日志不会打印出来,但文件照样会生成。想看匹配过程,用源码跑:
python IT资产匹配工具.py --cli 台账.xlsx 资产清单.xlsx 输出.xlsx
日志长这样,排查问题时很有用:
Sheet1 表头行1 查找列2(B) 返回列5(E) 有效行312 新增键298
[跳过] 临时表 缺少「IP地址」或「涉及业务系统/设备」列
还没做好的地方
工具不是万能的,边界讲清楚,免得你踩进去:
- 只处理 .xlsx,老格式 .xls 得先另存一次;
- 几百行的台账实测没问题,上万行没试过,打开时会全量读一遍,估计要等;
- 一次只能配一组列映射,想同时比对 IP 和域名得跑两遍;
- 界面里没有撤销,导出前建议在表格里核一遍;
- 不做 CIDR 网段包含判断。
03下载
2026·INVITATION
公众号内回复:“IT资产匹配工具”
04总结
2026·INVITATION
写在最后
写这个工具花了大概两天,其中一天半在跟各种脏数据较劲。回头看,代码本身没什么技术含量,纯AI手写落地,真正有价值的是那些被真实数据逼出来的判断:一格多值要拆、IP 段要展开但必须校验、表头识别的主判据必须是语义、回填列识别不到就宁可新建。每一条背后都是一次\"差点填错\"或者\"填错了才发现\"。
安全运营里有很多这样的活儿——不复杂、不性感、没人写进 KPI,但每个月都要来一次,每次都要耗掉半天。这些才是真正值得自动化的地方。与其等一个\"平台\"来解决,不如花两天让AI给自己写个 exe。
点击上方
关注我们
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论