用 MAC 地址做网络资产盘点的正确方式

查询排障

MAC 地址看起来是理想的资产标识:全局唯一、不随 IP 变化、无需在设备上装任何代理就能收集。但直接把它当主键会在几年后带来麻烦。这里讲清楚它适合承担什么角色。

它的优势

无需代理即可采集。 从交换机的 MAC 地址表、DHCP 租约、ARP 表就能拿到全网设备清单,不用登录每台机器。

能推断设备类型。 前 24 位标识厂商,查一下就能大致分类。查到打印机厂商、摄像头厂商、虚拟化平台前缀,基本就知道这是什么。批量识别时可以把 MAC 提交给查询页的 JSON 接口:

curl "https://7n4.cn/api/mac2vendor?mac=40:6c:8f:18:2c:03"

能发现未登记设备。 把实际扫描到的地址与台账比对,差集就是需要核查的对象。这是发现影子设备最有效的手段之一。

它的局限

移动设备的地址不稳定。 地址随机化让手机、平板、笔记本每个网络一个地址,部分系统还会定期轮换。用 MAC 统计设备数量会严重高估。

一台设备有多个地址。 有线口、无线口、蓝牙、带外管理口各有一个,虚拟化宿主机还有一堆虚拟接口。把它们关联到同一个资产需要额外信息。

更换网卡就换身份。 主板维修、扩展卡更换之后,同一台物理设备的 MAC 变了,台账里就多出一条幽灵记录。

查到的厂商不等于品牌。 IEEE 记录的是注册主体,代工厂和模块供应商的前缀很常见,原因见查不到厂商或厂商不对的几种原因。

推荐的做法

主键用资产编号,MAC 作为属性。 而且是可以有多个值的属性。一台设备记录它所有接口的 MAC,任何一个匹配都能定位到这台资产。更换网卡时新增一条并把旧的标记为历史,而不是覆盖。

区分稳定资产与移动设备。 服务器、网络设备、打印机、摄像头、工业控制器不做随机化,MAC 是可靠标识,值得精确维护。个人移动设备则放弃按 MAC 追踪,改用 802.1X 的用户身份作为锚点,见802.1X 与 MAC 认证旁路。

用 LLDP 和 CDP 补充位置信息。 邻居发现协议能告出设备接在哪台交换机的哪个端口,这比 MAC 本身更有运维价值:

show lldp neighbors detail

记录采集来源和时间。 同一个 MAC 可能同时出现在交换机表、DHCP 租约和扫描结果里,记清每条数据的来源和采集时间,才能判断设备是真的在线还是只是历史残留。

按前缀自动分类。 虚拟化平台的前缀很有规律,可以写规则自动把资产分成物理机与虚机,前缀表见虚拟机与容器的 MAC 地址。本地管理地址(第二个十六进制字符为 2、6、A、E)则直接归入"随机或虚拟"类别,不要试图追踪。

一个简单的采集脚本

#!/bin/bash
# 扫描本网段并标注厂商
sudo arp-scan --localnet --plain | while read ip mac rest; do
  vendor=$(curl -s "https://7n4.cn/api/mac2vendor?mac=$mac" \
           | python3 -c 'import sys,json; print(json.load(sys.stdin).get("comment","未知"))' 2>/dev/null)
  printf "%-16s %-18s %s\n" "$ip" "$mac" "$vendor"
done

输出可以直接与台账做差集比对。注意接口有防滥用限制,大批量查询请控制频率,或者本地缓存前缀到厂商的映射表。

定期复核

台账的价值在于准确。建议每季度做一次全网扫描并与记录比对,重点关注三类差异:扫描到但台账里没有的设备、台账里有但长期未上线的设备、以及厂商与登记类型不符的设备。第三类往往能发现被替换过硬件或登记错误的资产。

相关文章
关于作者 · Jondy

网络工程师,长期从事企业网络运维与安全工作。2017 年搭建 7n4.cn,关注 MAC 随机化对企业准入控制的影响。欢迎来信交流。

← 返回博客列表