mac os x中的网络状态更改通知

时间:2012-02-20 06:29:37

标签: macos networking

在Mac Os X中,当网络连接状态发生变化时,我的应用程序如何获得通知?我尝试使用SCNetworkConnection Reference中的SCNetworkConnectionGetStatus。但它必须不断被称为。我需要一个API,一旦网络状态变化就会通知我。

1 个答案:

答案 0 :(得分:1)

这是我最终使用的。一旦我有了这个脚本,我就把它放入一个基本的while循环和voila - 网络连接变化监控。

#!/bin/bash
set -o pipefail

configured_ip_addresses="$((ifconfig | \
  grep -iEo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | \
  grep -vi '127.0.0.1' | tr '\n' ' ') || echo NONE_CONFIGURED)"
externally_visible_ip_address="$(curl -m 1 ipinfo.io/ip 2>/dev/null || echo NO_CONNECTIVITY)"
computed_state="Actual:  $externally_visible_ip_address, Configured: $configured_ip_addresses"

statefile="/tmp/net-watcher.state"
if [ -f $statefile ]; then
  echo "$computed_state" > "${statefile}-new"
  new_chksum="$(md5 "${statefile}-new" | awk '{print $NF}')"
  existing_chksum="$(md5 "${statefile}" | awk '{print $NF}')"
  if [[ "${new_chksum}" != "${existing_chksum}" ]]; then
    mv "${statefile}-new" "${statefile}"
    osascript -e "display notification \"$(cat $statefile)\" with title \"ALERT: Network Changed\""
  else
    rm "${statefile}-new"
  fi
else
  echo "$computed_state" > $statefile
fi