VLOOKUP救不了资产台账:我把IT资产台账匹配写成了个exe程序"

admin 2026-10-22 14:22:49 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

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。

点击上方

关注我们

AIStorm亮相东南亚顶级安全盛会GovWare2026以全栈AI安全能力破局智能体时代" 网络安全文章

AIStorm亮相东南亚顶级安全盛会GovWare2026以全栈AI安全能力破局智能体时代"

AIStorm亮相新加坡GovWare2026展会,以全栈AI安全能力应对智能体时代挑战。其核心战略涵盖AI驱动的网络安全与AI安全治理两大主线,推出AIDR方案、智能体身份安全及Token运营平台等产品,旨在构建发现-拦截-监控-修复的安全闭环,助力企业管控智能体权限越界与行为失控风险,并拓展全球市场。
如何判定这个人是不是CIA特工" 网络安全文章

如何判定这个人是不是CIA特工"

本文系统阐述判断个人是否与CIA存在秘密关系的分析方法论,强调不能凭外貌、职业或性格特征下结论,而应关注行为是否形成完整证据链。文章区分了CIA正式雇员、行动官、线人及冒牌货等类别,分析了套取信息、关系变质、身份核查等关键环节,提出需同时出现不正常信息需求、关系发展、利益交换和保密要求四要素,并强调从可疑到确认需分级证据支撑,最后提醒避免擅自调查的违法行为。
评论:0   参与:  0