[Mac] 用 networksetup 指令,取得與設定 Wi-Fi 無線網路的連線狀態
最近用 Keyboard Maestro 寫在 Mac 上自動登入公司 VPN 的腳本,
不過偶爾遇到一些例外狀況要處理,
像今天是遇到 Wi-fi 網路被我手動關閉,導致腳本執行失敗…
因此要想個方法,來偵測 Wi-fi 的狀況,以及將 Wi-fi 打開~
在網路上找了一下,原來 Mac 內建的 networksetup 指令就能做到這些事了~
舉例來說,可以用 networksetup -listallnetworkservice 列出所有的網路類型:
testuser@localhost ~ $ networksetup -listallnetworkservices An asterisk (*) denotes that a network service is disabled. MT65xx Preloader Ethernet FireWire Wi-Fi Bluetooth PAN Thunderbolt Bridge
可以看到有個網路類型是 “Wi-Fi”,接著用 networksetup -getinfo 可以取得相關資訊,
像是目前的 IP address、Wi-Fi ID 等等~
如果是要偵測 Wi-Fi 有沒有成功連上網路的話,搜尋下面的輸出裡面,
有沒有 IP address 之類的字串加上一個合法的 IP 位址就行了:
testuser@localhost ~ $ networksetup -getinfo Wi-Fi
DHCP Configuration
IP address: 10.1.2.3
Subnet mask: 255.255.252.0
Router: 10.1.2.254
Client ID:
IPv6: Automatic
IPv6 IP address: none
IPv6 Router: none
Wi-Fi ID: 11:22:33:44:55:66
如果要操作 Wi-Fi 設備的話,得先知道設備的名稱,
這個設備的名稱在每台電腦上都有可能不一樣 (不像 “Wi-Fi” 這個網路類型是每台 Mac 都應該有的),
因此要用 networksetup -listallhardwareports 來列出所有的網路設備,
像我們可以從下面的輸出中,得知 Wi-Fi 的網卡設備是 en1:
testuser@localhost ~ $ networksetup -listallhardwareports Hardware Port: Ethernet Device: en0 Ethernet Address: 11:11:11:11:15:85 Hardware Port: FireWire Device: fw0 Ethernet Address: 22:22:22:22:fe:6a:59:dc Hardware Port: Wi-Fi Device: en1 Ethernet Address: 33:33:33:33:aa:8e Hardware Port: Bluetooth PAN Device: en3 Ethernet Address: 44:44:44:44:aa:8f Hardware Port: Thunderbolt 1 Device: en2 Ethernet Address: 55:55:55:55:9d:c0 Hardware Port: Thunderbolt Bridge Device: bridge0 Ethernet Address: 66:66:66:66:9d:c0 VLAN Configurations ===================
接著用 networksetup -getairportpower 就能得知目前 Wi-Fi 設備是不是開啟的:
testuser@localhost ~ $ networksetup -getairportpower en1 Wi-Fi Power (en1): Off
用 networksetup -setairportpower 就能開關指定的 Wi-Fi 設備:
networksetup -setairportpower en1 on
用 networksetup -getairportpower 再看一次,果真 Wi-Fi 設備已經被打開囉:
testuser@localhost ~ $ networksetup -getairportpower en1 Wi-Fi Power (en1): On
參考資料:Managing WIFI connections using the Mac OSX terminal command line