9

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

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

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

5 ответов5

8

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

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

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

-b

7

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

1

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

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

Psuedocode:

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

При подключении к локальному Wi-Fi, который не предоставляет DHCP-адрес, может возникнуть ситуация, когда вы настроены на ожидание адреса от DHCP.

-

Обновление: обнаружен возможный дубликат вопроса, который предлагает решение с открытым исходным кодом: MarcoPolo

1

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

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

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

Монтаж

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

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

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

Это оно!

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

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

Если вы хотите запускать сценарий каждый раз, когда вы подключаетесь к определенной сети 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
0

Поскольку данный ответ является ручным, вот простой скрипт, который автоматически его меняет:

Создайте различные местоположения в Системных настройках> Сеть, чтобы отразить каждую из ваших сетей 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 беспроводной сети. Теперь, это должно быть выполнено всякий раз, когда есть изменение в настройках сети. Мы создадим агент запуска, чтобы сделать то же самое.

Запущенный список : (~/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 тоже!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .