当连接到具有特定名称的Wifi网络并在所有其他Wifi网络上使用DHCP时,是否可以将Mac OS X设置为使用静态IP地址自动配置其Airport接口?
目前,我正在使用“系统偏好设置”中“网络”部分的“位置”功能来手动在两个IP地址设置之间切换。我有一个“我的静态IP”设置和一个默认的“ DHCP”设置。但是,这需要每次切换位置时都进入“系统偏好设置”以更改“位置”下拉列表。这可以自动化吗?
优选地,这将在没有第三方软件的情况下完成。
当连接到具有特定名称的Wifi网络并在所有其他Wifi网络上使用DHCP时,是否可以将Mac OS X设置为使用静态IP地址自动配置其Airport接口?
目前,我正在使用“系统偏好设置”中“网络”部分的“位置”功能来手动在两个IP地址设置之间切换。我有一个“我的静态IP”设置和一个默认的“ DHCP”设置。但是,这需要每次切换位置时都进入“系统偏好设置”以更改“位置”下拉列表。这可以自动化吗?
优选地,这将在没有第三方软件的情况下完成。
Answers:
这不是只能通过OS来完成的事情。
前述位置是一种选择,还有免费软件Airport Location或MarcoPolo或付费Network Location。还有一个名为WiFiScriptor的AppleScript可以提供帮助。
然而!您无需进入系统偏好设置 -> 网络 -> [位置下拉菜单]。您可以通过Apple菜单 -> 位置(向下大约6个选项)-> [选择所需的位置]
-b
可以在没有任何第三方的情况下进行操作,请参阅https://github.com/rimar/wifi-location-changer
可能适合您的第三方非免费解决方案是Locations。
正如这个关于stackoverflow的类似但不完全相同的问题的答案所建议的那样,您可以创建一个以固定间隔运行的脚本。launchd
将阻止它多次运行。
伪代码:
networksetup -getairportnetwork AirPort
networksetup -switchtolocation {location}
,其中{location}是要根据找到的wifi网络切换到的位置的名称。在连接到本地wifi时,可能会遇到麻烦,但是当您配置为从DHCP获得地址时,该本地wifi不提供DHCP地址。
-
由于给定的答案是手动的,因此以下是一个可以自动更改它的简单脚本:
在系统偏好设置>网络中创建各种位置,以反映您的每个WiFi网络。
脚本:(/usr/bin/autolocation.sh
)将其放在您喜欢的位置,并根据您的情况在脚本中更改SSID值。
#!/bin/sh
#get the ssid of the network we are on
ssid=`ioreg -l -n AirPortDriver | grep 80211SSID | sed 's/|//g' | sed 's/"//g' | sed 's/ */ /g' | awk '{print $3}'`
if [ $ssid = "voicegear" ]
then
location="Office / Home"
elif [ $ssid = "vijay" ]
then
location="Office / Home"
elif [ $ssid = "SCTHO" ]
then
location="Shriram Santhome"
else
location="Automatic"
fi
#update the location
newloc=`/usr/sbin/scselect "${location}" | sed 's/^.*(\(.*\)).*$/\1/'`
echo "${newloc}"
该脚本将根据无线网络的SSID更改网络位置(设置)。现在,只要网络设置发生更改,就必须运行此程序。我们将创建一个启动的代理来执行相同的操作。
已启动plist:(~/Library/LaunchAgents/com.vg.netwatcher.plist
)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>com.vg.netwatcher</string>
<key>Program</key>
<string>/usr/bin/autolocation.sh</string>
<key>LaunchEvents</key>
<dict>
<key>com.apple.notifyd.matching</key>
<dict>
<key>com.apple.system.config.network_change</key>
<dict>
<key>Notification</key>
<string>com.apple.system.config.network_change</string>
</dict>
</dict>
</dict>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
我是在~/Library/LaunchAgents
(我的主目录内)创建此文件的,因为我是唯一使用此计算机的用户。如果要使其具有全局性,请将其放入/Library/LaunchAgents
。
该文件必须归所有者所有,root
并具有以下600
权限:
sudo chown root Library/LaunchAgents/com.vg.netwatcher.pist
sudo chmod 600 Library/LauhchAgents/com.vg.netwatcher.plist
一旦您注销/登录或重新启动系统,启动代理将开始启动,具体取决于您将文件放在何处(您的主目录或全局目录)。但是,如果您不想这样做并希望现在加载它,请在命令行上运行以下命令。您只需要执行一次。
cd ~/Library/LaunchAgents
sudo launchctl load -w com.vg.netwatcher.plist
而已。现在,您Mac的IP将自动更改。
注意:也可以在El Capitan上使用!
这是一个非常有前途的脚本,用于基于WiFi SSID更改网络位置:
它由Anton Eprev创建。您可以在GitHub上查看代码和更详细的文档:
它通过命令行安装:
$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash
它将要求您输入root密码以安装locationchanger
到/usr/local/bin
目录。
而已!
之后,如果存在一个名称与当前WiFi网络的名称(SSID)相同的网络位置,它将自动切换到该网络位置。否则,它将切换到自动位置。(顺便说一句,如果没有名为Automatic的位置,它将在日志中退出并退出。)
如果要在每次连接到特定的WiFi网络时运行脚本,则将这些脚本放入~/.locations
并以WiFi网络命名,例如~/.locations/Corp Wi-Fi
:
#!/usr/bin/env bash
# Require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'
您可能想要创建~/.locations/Automatic
一个将重置其他位置的更改的方法:
#!/usr/bin/env bash
# Don’t require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'
确保将执行位强制转换为脚本(chmod +x
)。
您可以在多个WiFi网络之间共享网络位置。例如,如果您有一个无线路由器同时在2.4GHz和5GHz频段上广播,则可以创建一个配置文件~/.locations/locations.conf
,并将简单的键/值对放入其中:
Home_WiFi_5GHz=Home_WiFi
此处的键是WiFi网络名称,值是相应的网络位置。将其以等号(=
,没有空格)连接起来。在上面的示例中,如果连接了WiFi网络Home_WiFi_5GHz,它将切换到网络位置Home_WiFi。
请注意,位置别名优先于同名规则。在上面的示例中,~/.locations/Home_WiFi
当您连接到WiFi网络Home_WiFi_5GHz时,仅脚本将运行。
使用位置别名,您甚至不需要创建额外的网络位置来匹配WiFi网络的名称。
您可以使用以下命令查看大量日志:
$ tail -f ~/Library/Logs/LocationChanger.log
样本输出:
[2017-10-13 11:35] Connected to 'Unknown WiFi'
[2017-10-13 11:35] Location 'Unknown WiFi' was not found. Will default to 'Automatic'
[2017-10-13 11:35] Changing the location to 'Automatic'
CurrentSet updated to 6B593A12-C51B-3FF1-DE1D-87310F232147 (Automatic)
[2017-10-13 11:37] Connected to 'Home_WiFi_5GHz'
[2017-10-13 11:37] Will switch the location to 'Home_WiFi' (configuration file)
[2017-10-13 11:37] Changing the location to 'Home_WiFi'
CurrentSet updated to 7900D1E6-3820-50C6-882E-4F5K2BEF32ED (Home_WiFi)
首先,卸载启动代理:
launchctl unload ~/Library/LaunchAgents/LocationChanger.plist
然后,删除二进制文件,plist和日志文件:
rm ~/Library/LaunchAgents/LocationChanger.plist
rm ~/Library/Logs/LocationChanger.log
sudo rm /usr/local/bin/locationchanger
您还可以在其中删除配置文件和特定于位置的脚本~/.locations
:
rm -rf ~/.locations