在局域网里根据 MAC 地址定位一台设备

查询排障

日志里出现一个陌生的 MAC 地址,或者需要找出是哪台机器在占用带宽,都需要从 MAC 地址反查到物理位置。这件事分两步:先确认它在网络上的存在,再收窄到具体端口。

第一步:确认它在线并拿到 IP

扫描本网段的 ARP 响应。 arp-scan 是最快的办法,它直接发 ARP 请求,不受主机防火墙影响,因为二层必须回应:

sudo arp-scan --localnet

输出会列出 IP、MAC 和它内置的厂商名。如果需要更准确的厂商信息,把 MAC 贴到查询页查,数据每 30 天从 Wireshark 官方源同步。

用 nmap 做同样的事:

sudo nmap -sn 192.168.1.0/24

加 -sn 只做主机发现不扫端口。同网段下 nmap 也会走 ARP,因此比 ICMP 探测可靠。

查 DHCP 租约表。 如果设备是通过 DHCP 拿地址的,服务器上的租约记录直接给出 MAC 到 IP 的映射,还带主机名。ISC dhcpd 在 /var/lib/dhcp/dhcpd.leases,dnsmasq 在 /var/lib/misc/dnsmasq.leases。这条路径不需要扫描,对已离线的设备也有记录。

查路由器/网关的 ARP 表。 网关与所有主机通信过,它的 ARP 表往往最全:

ip neigh show

第二步:收窄到交换机端口

有了 MAC 地址之后,在管理型交换机上查 MAC 地址表就能定位端口。思科风格的命令:

show mac address-table address 001b.a912.3456

华为风格:

display mac-address 001b-a912-3456

输出会给出 VLAN 和端口号。如果端口是上行口(连接另一台交换机),说明设备在下游,需要登录下一级交换机继续查。逐级追踪是定位物理位置的标准方法,原理见交换机 MAC 地址表。

无线客户端则要在 AP 或无线控制器上查关联表,通常能同时看到信号强度,据此判断大致方位。

几个实用技巧

先看厂商能省很多时间。 查到是打印机厂商就不用在办公区一台台看电脑。在厂商目录里能确认某个前缀属于哪家公司。

用 LED 定位。 部分交换机支持临时点亮某个端口的指示灯,插着网线的那台机器立刻可见。

查不到厂商别急着当异常。 第二个十六进制字符是 2、6、A、E 的地址是本地管理地址,通常是启用了随机化的手机或虚拟接口,判断规则见读懂 MAC 地址第一字节。

设备已离线时。 ARP 表和 MAC 地址表都有老化时间,离线后条目会消失。此时只能依靠 DHCP 租约历史、交换机日志或 NetFlow 记录。

一个组合脚本

把扫描结果整理成表格,便于对照资产清单:

sudo arp-scan --localnet | awk '/^[0-9]/ {printf "%-16s %-18s %s\n", $1, $2, substr($0, index($0,$3))}'

如果你在做系统性的设备台账,把 MAC 作为其中一个字段的注意事项见用 MAC 地址做网络资产盘点。

相关文章
关于作者 · Kai

7n4.cn 网络运维方向作者,关注交换机、AP 与无线控制器的现场排查。文章按可复现的检查顺序展开,优先写清楚先看哪里、下一步怎么验证。

← 返回博客列表