Mac OS X автоматически меняет конфигурацию IP в зависимости от местоположения (по сети Wi-Fi)?

10

Может ли Mac OS X быть настроен на автоматическую настройку интерфейса Airport со статическим IP-адресом при подключении к сети Wifi с определенным именем, а во всех других сетях Wifi использовать DHCP?

В настоящее время я использую функцию «Расположение» раздела «Сеть» в Системных настройках, чтобы вручную переключаться между двумя настройками IP-адреса. У меня есть настройка «мой статический IP» и настройка «DHCP» по умолчанию. Однако для этого необходимо ввести Системные настройки, чтобы каждый раз менять выпадающее меню при переключении мест. Это может быть автоматизировано?

Желательно, чтобы это было сделано без стороннего программного обеспечения.

Маркус Халлманн
источник

Ответы:

8

Это не то, что можно сделать просто через ОС.

Вышеупомянутые локации - это один из вариантов, а также бесплатное местоположение в аэропорту, MarcoPolo или платное сетевое местоположение. Существует также AppleScript под названием WiFiScriptor, который может помочь.

Однако! Вам не нужно заходить в Системные настройки -> Сеть -> [Раскрывающийся список]. Вы можете перейти через меню Apple -> Местоположение (около 6 опций вниз) -> [выбрать местоположение, которое вы хотите]

-b

supreme_b_ing
источник
1
Спасибо за совет о переключении мест из меню Apple. Хотя все еще в ручном режиме, это кажется, по крайней мере, немного лучше, чем войти в Системные настройки с несколькими шагами.
Маркус Халлманн
Также спасибо за подтверждение, что (в настоящее время) невозможно сделать это без стороннего программного обеспечения.
Маркус Халлманн
ссылка «Расположение аэропорта» теперь указывает на спам-сайт
Nat
9

Можно обойтись без какой-либо третьей стороны, см. Https://github.com/rimar/wifi-location-changer

Юваль Римар
источник
2
Я просто хотел бы добавить, что для того, чтобы это работало, имя вашего местоположения должно совпадать с SSID сети Wi-Fi. Логика сценария заключается в том, что он проверяет местоположение с именем, похожим на SSID, и переключается на него. Если нет местоположения с таким именем, по умолчанию используется автоматический / автоматический.
Rystraum
Кроме того, мне пришлось выйти и снова войти в систему, прежде чем он начал работать на Yosemite.
djule5
1

Сторонним, несвободным решением, которое, вероятно, подойдет вам, является Locations .

Как следует из этого ответа на похожий, но не идентичный вопрос о stackoverflow, вы можете создать сценарий, который выполняется через регулярные промежутки времени. launchdпредотвратит его запуск более одного раза.

Psuedocode:

  • получить значение сохраненного_файла из файла
  • установить current_wifi для вывода networksetup -getairportnetwork AirPort
  • если сохранено_wifi == current_wifi, выйти
  • еще запустить networksetup -switchtolocation {location}где {местоположение} является именем местоположения, которое вы хотите переключиться на основе найденной сети Wi-Fi.

При подключении к локальному Wi-Fi, который не предоставляет DHCP-адрес, может возникнуть ситуация, когда вы настроены на ожидание адреса от 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

Вот и все. Теперь IP вашего Mac изменится автоматически.

Примечание: работает на El Capitan тоже!

Видж Виджай
источник
1

Представляем Location Changer

Вот очень многообещающий скрипт для изменения сетевых расположений на основе WiFi SSID:

Он создан Антоном Епревым . Вы можете просмотреть код и более подробную документацию на GitHub:

Установка

Устанавливается через командную строку:

$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash

Он попросит вас ввести пароль root для установки locationchangerв /usr/local/binкаталог.

Это оно!

После этого, если существует сетевое местоположение , имя которого идентично имени (SSID) текущей сети WiFi , оно автоматически переключится на сетевое местоположение. В противном случае он переключится на Автоматическое определение местоположения. (Кстати, если нет места с именем « Автоматически» , оно жалуется в журналах и выходит.)

Сценарий для конкретного местоположения

Если вы хотите запускать сценарий каждый раз, когда вы подключаетесь к определенной сети 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,4 и 5 ГГц, вы можете создать файл конфигурации ~/.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
Rockallite
источник