Mac OS X是否按位置(通过Wifi网络)自动更改IP配置?


10

当连接到具有特定名称的Wifi网络并在所有其他Wifi网络上使用DHCP时,是否可以将Mac OS X设置为使用静态IP地址自动配置其Airport接口?

目前,我正在使用“系统偏好设置”中“网络”部分的“位置”功能来手动在两个IP地址设置之间切换。我有一个“我的静态IP”设置和一个默认的“ DHCP”设置。但是,这需要每次切换位置时都进入“系统偏好设置”以更改“位置”下拉列表。这可以自动化吗?

优选地,这将在没有第三方软件的情况下完成。

Answers:


8

这不是只能通过OS来完成的事情。

前述位置是一种选择,还有免费软件Airport Location或MarcoPolo或付费Network Location。还有一个名为WiFiScriptor的AppleScript可以提供帮助。

然而!您无需进入系统偏好设置 -> 网络 -> [位置下拉菜单]。您可以通过Apple菜单 -> 位置(向下大约6个选项)-> [选择所需的位置]

-b


1
感谢您提供有关从Apple菜单切换位置的提示。尽管仍然是手动的,但感觉至少比通过多个步骤进入“系统偏好设置”要好一些。
Markus Hallmann

同样感谢您确认没有第三方软件(当前)无法执行此操作。
Markus Hallmann

Airport Location链接似乎现在指向垃圾邮件网站
2013年

9

可以在没有任何第三方的情况下进行操作,请参阅https://github.com/rimar/wifi-location-changer


2
我只想补充一点,为了使其正常工作,您的位置名称应与wifi网络的SSID相同。该脚本的逻辑是它检查名称类似于SSID的Location并切换到该位置。如果没有使用该名称的位置,则默认为自动/自动。
Rystraum 2014年

另外,在优胜美地开始工作之前,我必须注销并重新登录。
djule5 2015年

1

可能适合您的第三方非免费解决方案是Locations

正如这个关于stackoverflow的类似但不完全相同的问题的答案所建议的那样,您可以创建一个以固定间隔运行的脚本。launchd将阻止它多次运行。

伪代码:

  • 从文件中获取save_wifi值
  • 将current_wifi设置为的输出 networksetup -getairportnetwork AirPort
  • 如果save_wifi == current_wifi,则退出
  • 否则运行networksetup -switchtolocation {location},其中{location}是要根据找到的wifi网络切换到的位置的名称。

在连接到本地wifi时,可能会遇到麻烦,但是当您配置为从DHCP获得地址时,该本地wifi不提供DHCP地址。

-

更新:发现可能存在重复的问题,建议采用开源解决方案:MarcoPolo


1

由于给定的答案是手动的,因此以下是一个可以自动更改它的简单脚本:

在系统偏好设置>网络中创建各种位置,以反映您的每个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上使用!


1

介绍位置变更器

这是一个非常有前途的脚本,用于基于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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.