ping不通但网页能打开,通常是ICMP被防火墙静默丢弃;应改用curl或nc测TCP连通性,结合traceroute -I、mtr、scutil --dns和netstat排查接口优先级、DNS策略及路由路径。

ping 不通但网页能打开?先确认是不是 ICMP 被策略拦截了
MacOS 的 ping 默认走 ICMP,而很多网络环境(企业防火墙、校园网、甚至某些家用路由器)会静默丢弃 ICMP 包——这不是你网络坏了,是对方“装作没听见”。这时候 ping 失败完全不等于连通性有问题。
- 用
curl -I http://example.com或nc -zv example.com 80直接测 TCP 连通性,更贴近真实应用行为 - 如果
ping不通但curl成功,基本可排除本机配置问题,重点查目标服务或中间策略 - 注意:部分网站(如 github.com)会响应 ICMP,但 cdn 域名(如 assets-cdn.github.com)可能不响应,别拿一个子域名的 ping 结果下结论
traceroute 显示 * * *?不是卡住,是中间节点不回 ICMP TTL-exceeded
MacOS 自带的 traceroute 默认用 UDP(端口 33434 起),而很多运营商设备对 UDP 探测包直接丢弃且不发 ICMP 错误报文,所以看到一串 * * * 很正常,不代表路径断了。
- 改用
traceroute -I(大写 i)强制走 ICMP,和 Windows 的tracert行为一致,兼容性更好 - 或者用
mtr example.com(需brew install mtr),它混合 ICMP/TCP 并持续采样,比单次traceroute更能反映真实路径抖动 - macOS 12+ 的
networkQuality命令也能间接反映路径质量,但只输出吞吐和延迟,不显示跳数
nslookup 和 dig 都返回 NXDOMAIN?检查 /etc/resolver/ 下的自定义解析规则
MacOS 允许按域名后缀配置独立 DNS 服务器(比如给 .local 或公司内网域名指定内部 DNS),这些规则存在 /etc/resolver/ 下的文件里。一旦配错,nslookup 可能走对了 DNS,但系统级解析(比如 Safari、curl)却走错,导致“能 nslookup 但打不开网页”。
- 运行
ls /etc/resolver/看有没有非系统生成的文件(如/etc/resolver/company.internal) - 用
scutil --dns查当前实际生效的 DNS 配置,它会显示每个域名后缀绑定的 nameserver - 临时禁用自定义 resolver:重命名对应文件,再执行
sudo dscacheutil -flushcache清缓存
同一台 Mac,Wi-Fi 能连、有线连不上?盯紧 interface 优先级和路由表
MacOS 会按接口类型自动设置路由 metric(优先级),Wi-Fi 默认比以太网低(即更高优),即使有线插着,流量也可能全走 Wi-Fi。这时你看到“有线已连接”,但实际没走它。
- 用
netstat -nr | grep '^default'查当前默认路由走哪个 interface(比如en0还是en1) - 用
networksetup -listallhardwareports确认en0/en1对应的是 Wi-Fi 还是有线 - 手动调高有线优先级:
sudo networksetup -setmetric "Ethernet" 100(数值越小越优先),Wi-Fi 可设为 200 - 注意:某些 USB-C 转以太网适配器会被识别为
en7或类似编号,得先确认名字再操作
网络诊断里最麻烦的从来不是命令不会敲,而是你以为在测 A,其实系统正在走 B——interface、DNS、路由、协议栈策略,四层叠在一起,漏看一层就白忙活半天。

















