arp-scan是mac上快速获取局域网活跃设备ip与mac地址的首选工具,需brew安装后用sudo arp-scan --local扫描,结果含ip、mac及厂商信息。

你需要在Mac上快速掌握局域网内所有活跃设备的IP与MAC地址,用于排查冲突、定位陌生设备或确认共享服务可用性。图形界面无法直接列出全网设备,必须依赖终端工具主动探测。
用arp-scan一次性扫出全部在线设备
arp-scan是专为局域网扫描设计的轻量级命令行工具,能绕过ARP缓存限制,直接向整个子网发包并收集响应,结果包含IP、MAC、厂商信息三要素。
第一步:安装arp-scan(若未安装)→ 打开终端,执行:brew install arp-scan。Homebrew未安装则先运行/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"。
第二步:获取本机所在子网段 → 在终端中输入ipconfig getifaddr en0(Wi-Fi)或ipconfig getifaddr en1(有线),记下返回的IP(如192.168.3.15);再执行netstat -nr | grep default,提取网关IP(如192.168.3.1);两者前三位相同,说明子网为192.168.3.0/24。
第三步:执行扫描 → 输入sudo arp-scan --local并回车。系统会提示输入管理员密码,输入后立即开始扫描;输出中每行包含IP地址、MAC地址、厂商名称(如“Apple, Inc.”),无响应设备不会出现。
注意:必须加sudo权限,否则无法发送原始ARP包,扫描将失败并只显示空结果。
用nmap替代方案(无需额外安装)
如果你已安装Xcode命令行工具(通常默认存在),nmap可作为arp-scan的备选——它通过ICMP+ARP双路径探测,对防火墙拦截更鲁棒,但速度略慢。
方法一:直接调用系统自带nmap(macOS Ventura及更新版本预装)→ 终端输入:sudo nmap -sn 192.168.3.0/24(请将IP段替换为你实际子网)。
方法二:若提示“command not found”,说明未预装→ 先执行brew install nmap,再运行上述命令。
输出中以“Nmap scan report for”开头的行显示IP,“MAC Address:”后紧跟MAC地址及厂商;未响应主机不会列名,但比arp-scan多一层ICMP探测,可能发现禁用了ARP响应的设备。
用系统内置arp命令查已有缓存记录
arp命令不主动扫描,只读取内核ARP缓存表,适合快速查看近期通信过的设备,零依赖、秒出结果,但无法发现从未交互的新设备。
在终端中输入:arp -a,回车执行。
输出格式为:? (192.168.3.23) at 0:8:a:d:e:69 on en0 ifscope [ethernet],其中括号内是IP,at后是MAC,on后是接口名;若某设备近期未通信,此处不会出现。
【关键前提】该方法仅反映当前ARP缓存内容,缓存条目会在几分钟内自动过期,且仅限本机曾主动访问或被访问过的设备。
用Python脚本手动构造ARP请求(免安装进阶法)
如果你无法安装第三方工具又需要主动探测,可利用macOS已预装的Python和系统级网络权限,用scapy库发送原始ARP包——此方法完全绕过arp-scan/nmap依赖。
第一步:确认Python环境 → 终端输入python3 --version,确保输出≥3.8。
第二步:安装scapy → 执行pip3 install scapy(首次运行可能提示需安装Xcode命令行工具,按提示执行xcode-select --install)。
第三步:运行扫描脚本 → 复制以下代码到文本编辑器,保存为scan.py,然后终端执行sudo python3 scan.py:
from scapy.all import ARP, Ether, srp<br>ip_range = "192.168.3.0/24"<br>arp_request = ARP(pdst=ip_range)<br>ether = Ether(dst="ff:ff:ff:ff:ff:ff")<br>packet = ether/arp_request<br>result = srp(packet, timeout=2, verbose=0)[0]<br>print("IP Address\tMAC Address")<br>for sent, received in result:<br> print(f"{received.psrc}\t{received.hwsrc}")
脚本会打印所有响应设备的IP与MAC,【注意】必须用sudo运行,否则scapy无权发送原始以太网帧。











