共217行
2026-07-27 15:54:42
ARP = Address Resolution Protocol,地址解析协议
标准:RFC 826,工作在 TCP/IP 二层与三层之间(介于数据链路层 & 网络层)
一句话核心作用:
已知IP地址,查询对应的MAC物理地址
局域网通信两套地址:
192.168.10.24118:4a:53:24:da:f3规则:
假设你的 Mac(192.168.10.100)要访问 192.168.10.241
广播:发给局域网所有设备
FF:FF:FF:FF:FF:FF
内容:“谁是192.168.10.241?请把你的MAC地址告诉我!”
“我是192.168.10.241,我的MAC=18:4a:53:24:da:f3”
操作系统维护一张临时表格:IP <--> MAC <--> 网卡接口
你执行命令看到的就是缓存:
arp -a缓存条目分两类:
动态ARP(默认)
通过ARP广播自动学习得到,有老化时间(macOS一般20分钟左右)
超时后自动删除,下次访问重新广播查询。
静态ARP(你正在配置的)
管理员手动写入,不经过广播查询。
✅ 用途:
当一台设备收到ARP请求,目标IP不在本网段,设备代替目标回复ARP应答。
你最初报错:
can only proxy for 192.168.10.241
原因:macOSarp -s(小写)容易被内核识别为创建ARP代理条目,而不是普通静态ARP。
解决方案:macOS 使用大写arp -S+ifscope指定网卡,强制普通静态条目。
攻击者发送伪造ARP应答:宣称网关IP对应的MAC是自己网卡。
局域网流量全部经过攻击者,实现抓包、断网。
绑定静态ARP就是最简单防御手段。
# ❌ 小写s,容易生成proxy代理条目
arp -s IP MAC
# ✅ 大写S 创建标准静态ARP(推荐)
arp -S IP MAC ifscope 网卡名
# 查看缓存
arp -a
# 删除条目
arp -d IP ifscope en1arp -a # 查看缓存
arp -s IP MAC # 添加静态ARP(永久到重启)
arp -d IP # 删除不推荐老旧 arp 命令,标准工具:
ip neigh show # 查看ARP表
ip neigh add IP lladdr MAC nud permanent dev eth0 #静态ARParp -s 极易混淆代理与静态条目,统一使用 ip neigh
你在 macOS 绑定静态ARP目的:
强制系统永远使用 192.168.10.241 → 18:4a:53:24:da:f3,不再发送ARP广播查询,杜绝伪造ARP应答干扰。
⚠️ 避坑要点再次汇总:
arp -S 不要用 arp -sifscope 后面填网卡名称(en0/en1),不能写MAC[ethernet];[proxy only] = 创建失败禁用小写命令:禁止arp -s,会触发 can only proxy for 代理报错
必用大写命令:标准静态绑定 arp -S(BSD/macOS 专用)
ifscope 规则:后接网卡名(en0/en1),绝对不能填MAC地址
查询本机网卡:
networksetup -listallhardwareports常规对应:Wi-Fi=en0 | 有线网卡=en1(本次环境为 en1)
先清旧缓存、再绑定静态ARP(cannot locate 为正常提示,无需处理):
sudo arp -d 192.168.10.241 ifscope en1
sudo arp -S 192.168.10.241 18:4a:53:24:da:f3 ifscope en1arp -a | grep 192.168.10.241✅ 正常生效:末尾显示 [ethernet](纯静态绑定)
❌ 绑定失败:显示 [proxy only](代理模式,重新执行绑定命令即可)
sudo arp -d 192.168.10.241 ifscope en1本次绑定为临时生效:重启电脑、拔插网线、网卡休眠后失效
macOS 无系统原生永久ARP绑定方案
静态ARP核心作用:防ARP欺骗、固定设备映射、杜绝缓存抖动
| 报错信息 | 问题原因 | 解决方案 |
|---|---|---|
ifscope has bad interface name |
ifscope 后填写了MAC地址 | 替换为网卡名 en0/en1 |
can only proxy for xxx |
使用小写 arp -s |
改用 arp -S + 指定网卡 |
条目显示 [proxy only] |
内核误判为代理条目 | 删除条目后重新绑定 |
适配重启失效问题,开机自动加载静态ARP,全套一键执行:
# 1. 创建ARP绑定脚本
sudo tee /usr/local/bin/static_arp.sh <<'EOF'
#!/bin/zsh
arp -S 192.168.10.241 18:4a:53:24:da:f3 ifscope en1
EOF
# 2. 添加执行权限
sudo chmod +x /usr/local/bin/static_arp.sh
# 3. 创建开机守护进程
sudo tee /Library/LaunchDaemons/com.user.staticarp.plist <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.staticarp</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/static_arp.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/static_arp.log</string>
<key>StandardErrorPath</key>
<string>/var/log/static_arp.err</string>
</dict>
</plist>
EOF
# 4. 加载开机自启
sudo launchctl load /Library/LaunchDaemons/com.user.staticarp.plist⚠️ 限制:网线拔插后仍会失效,需重新执行绑定
(注:部分内容可能由 AI 生成)