applescript可通过networksetup或ipconfig命令检测网络状态,返回"connected"、"connecting"、"disconnected";先查ip地址,再验证网关连通性或dns可达性以提升准确性,适用于自动化任务触发。

AppleScript 可以直接调用 macOS 系统命令来获取当前网络连接状态,无需额外依赖,适合轻量级自动化场景。核心思路是通过 networksetup 或 ipconfig 命令判断是否有活跃的网络接口(如 Wi-Fi、以太网),再结合系统偏好设置或网络可达性测试增强判断可靠性。
检测主网络接口是否已连接
使用 networksetup -getinfo 查询默认服务(如 “Wi-Fi” 或 “Ethernet”)的 IP 地址和连接状态:
- 若返回含
IP address:且非0.0.0.0或空值,通常表示已获取有效 IP - 若提示
Not connected或No hardware port,说明未连接 - 注意:服务名称需与系统实际名称一致(如可能是 “Wi-Fi”,也可能是 “Wi-Fi 2”),建议先运行
networksetup -listallhardwareports确认
检查默认路由是否可达(更可靠)
仅靠 IP 地址可能误判(如 DHCP 超时但 IP 未释放)。推荐补充测试网关连通性:
查询 Apple 开发者文档、API 与 2014‑2025 年 WWDC 视频,搜索 SwiftUI、UIKit、Objective‑C、Swift 框架及 watch 会话。
- 用
route get default | grep gateway提取默认网关地址 - 再执行
ping -c 1 -t 1 [gateway],成功返回 0 表示路由层通畅 - 若无默认路由,可退而测试公共 DNS(如
8.8.8.8)是否能 ping 通,作为辅助判断
整合为可复用的 AppleScript 函数
以下脚本返回字符串:"connected"、"connecting"、"disconnected":
set networkStatus to do shell script "if ipconfig getifaddr en0 >/dev/null 2>&1; then
gateway=$(route -n get default 2>/dev/null | awk '/gateway:/ {print $2}');
if [ -n \"$gateway\" ] && ping -c 1 -t 1 \"$gateway\" >/dev/null 2>&1; then
echo \"connected\";
else
echo \"connecting\";
fi;
else
echo \"disconnected\";
fi"
可根据需要替换 en0 为实际接口(如 en1 对应某些 Mac 的 Wi-Fi),或改用 networksetup -getinfo \"Wi-Fi\" | grep \"IP address:\" 更语义化。
触发自动化任务的典型用法
将该状态用于条件分支,例如:
- 仅在
"connected"时运行同步脚本(如rsync或dropbox upload) - 网络断开时自动暂停下载任务(发送
kill信号给curl或aria2c进程) - 配合
launchd定时轮询,或监听systemconfiguration:State:/Network/Global/IPv4的notify事件实现即时响应










