MAC 地址查询工具

看到 MAC B8:27:EB:XX:XX:XX,瞬间知道"哦,树莓派"。这是工程师的"职业直觉"。

背景

MAC 地址前 24 位是 OUI(Organizationally Unique Identifier),由 IEEE 分配给厂商。

B8:27:EB:XX:XX:XX
└──OUI──┘ └─ 设备 ID ─┘
 树莓派

认得 OUI 就 =认设备。看到 MAC 就 =知道哪家的设备。

不可能记住几千个 OUI。所以做了这个工具。

它能做什么

MAC 查询

  • 厂商识别(基于 200+ 常见 OUI 数据库)
  • 格式标准化(任意分隔符 → 标准格式)
  • MAC 转十进制(数据库存储常用)
  • 单播/组播判断(末位 bit 0 = 单播)
  • U/L 位判断(倒数第二位 bit 0 = 厂商出厂,否则 = 虚拟机/手动改)

U/L 位:识别"真假" MAC

00:1B:63:AA:BB:CC  ← Apple 出厂(U/L = 0,全局唯一)
02:42:AC:11:00:02  ← Docker 容器(U/L = 1,本地生成)

路由器上看到这个特征 —— 十有八九是虚拟机或容器

使用场景

场景 1:交换机看到陌生 MAC

% display mac-address
MAC Address       VLAN  Port
00:1B:63-AA-BB-CC 10    GE0/0/1   ← Apple 设备
B8:27:EB-XX-XX-XX 20    GE0/0/2   ← 树莓派?
00:0C:29-YY-YY-YY 30    GE0/0/3   ← VMware 虚拟机

不用猜,全部查得到。

场景 2:ARP 欺骗排查

# 网关的 MAC 应该是稳定的
# 如果看到不同的 MAC 抢答 ARP,就是欺骗
arp -a
192.168.1.1 → 00:1A:2B:XX:XX:CC  ← 假网关!
192.168.1.1 → 5C:53:8E:XX:XX:XX  ← 真网关(华为)

场景 3:设备资产盘点

公司要做资产盘点,把所有 MAC 列出来,自动归类厂商

00:1B:63:...    Apple          150 台
3C:5A:B4:...    Google         80 台
B8:27:EB:...    Raspberry Pi   25 台
...

核心实现

OUI 数据库 = 一个大字典:

OUI_DATABASE = {
    '001B63': 'Apple, Inc.',
    '001F33': 'Apple, Inc.',
    '3C5AB4': 'Google, Inc.',
    'B827EB': 'Raspberry Pi Foundation',
    # ... 200+ 条
}

def lookup_mac_vendor(mac):
    s = re.sub(r'[^0-9A-Fa-f]', '', mac).upper()
    oui = s[:6]
    return OUI_DATABASE.get(oui, '未知厂商')

U/L 位判断:

first_byte = int(cleaned[:2], 16)
is_multicast = bool(first_byte & 0x01)  # 末位 1 = 组播
is_local = bool(first_byte & 0x02)      # 倒数第二位 1 = 本地生成

已知局限

⚠️ 内置数据库只收录 200+ 常见厂商,完整 IEEE OUI 数据库30 万+ 条

要全库?两种方法:

  1. 自己加 oui.txt(从 IEEE 官网 下载,几十 MB)
  2. 用我后面会做的"完整版"工具

在线使用

👉 MAC 地址查询

彩蛋:常见 MAC 前缀速查

B8:27:EB  树莓派
3C:5A:B4  Chromebook / Google Nest
00:50:56  VMware 虚拟机(默认)
08:00:27  VirtualBox 虚拟机
02:42:AC  Docker 默认 bridge
52:54:00  QEMU/KVM 默认
FC:FB:FB  Cisco Nexus vPC

背几个常用的,看到就秒懂


📱 关注「网英的日常」,更多工程师工具持续更新!