applescript 无法直接实时监控网络流量,但可通过调用 ifconfig、vnstat 等命令行工具实现轻量级自动化监控,结合定时采样、差值计算、阈值告警及日志记录,并推荐用 launchd 替代循环延时以提升稳定性。

AppleScript 本身不直接支持实时网络流量监控(如读取网卡字节计数、抓包或解析 TCP 流量),它缺乏底层网络接口访问能力。但你可以用 AppleScript 调用 macOS 原生命令行工具(如 netstat、ifconfig、vnstat 或 ipfw/pf 日志),再配合定时执行与数据比对,实现轻量级的“自动化监控”逻辑。
获取实时网卡收发字节数
macOS 的 ifconfig 可输出各接口的累计收发字节数。AppleScript 可调用 shell 获取并缓存前后差值,估算短时流量:
- 用
do shell script "ifconfig en0 | grep 'bytes'"提取当前 en0(或你实际使用的接口)的 RX/TX 行 - 正则提取数字部分(例如
"received 123456789 bytes"→123456789) - 将上次记录值与本次相减,得到间隔内流量(单位:字节)
- 建议每 5–30 秒采样一次,避免高频调用影响性能
结合 vnstat 实现持久化流量统计
vnstat 是 macOS 上成熟稳定的网络流量监控工具(需 brew install vnstat 并初始化数据库)。AppleScript 可定期调用它获取小时/日/月维度的流量报表:
在 macOS 上通过命令行管理 Apple Calendar 事件——创建、更新、删除、搜索、导出及检查空闲时间,并提供完整的 JSON 输出供代理使用。
- 首次运行:
do shell script "sudo vnstat -u -i en0"初始化接口数据 - 查询最近 1 小时流量:
do shell script "vnstat -i en0 -h | tail -n +4 | head -n 1" - 若结果超过阈值(如小时流量 > 500MB),可触发通知或记录日志
- 推荐搭配 launchd 定时任务(而非 AppleScript 内置 delay),更稳定可靠
触发告警与通知
当检测到异常流量(突增、持续高位、特定端口活跃等),可用 AppleScript 主动提醒:
- 弹窗提示:
display alert "高流量警告" message "en0 过去60秒接收 120MB" as critical - 发送通知:
display notification "流量超限" with title "Network Watcher" - 写入日志文件:
do shell script "echo $(date): 120MB/s >> /tmp/netwatch.log" - 进一步可调用
osascript启动其他脚本,或用mail发送邮件(需配置本地 SMTP)
注意事项与替代建议
纯 AppleScript 不适合做专业级流量监控(无实时流处理、无图形界面绘图、难对接 SNMP/API)。如需更强能力,建议组合使用:
- 用 Python(
psutil或scapy)做核心采集,AppleScript 仅作启动/通知胶水层 - 用 Swift 编写小工具调用
NetworkExtension框架,获得更细粒度控制(需用户授权) - 直接使用开源工具如
ntopng、Dark Mode Network Monitor(App Store)或Little Snitch(含规则与实时视图) - AppleScript 中避免长时间循环阻塞;用
launchd替代repeat+delay更符合 macOS 设计规范










