Как автоматически переключать настройки DNS при подключении к другому WiFi?
У меня совершенно разные настройки DNS, когда я на работе и дома. Мне было интересно, могу ли я автоматически изменять настройки DNS моего MacBook Pro при подключении к другому Wi-Fi.
Я много искал, в настройках сети сделал собственное Местоположение под названием Дом. И я установил свои настройки домашнего DNS в этом профиле. И профиль по умолчанию под названием «Автоматический». Я позволяю компьютеру автоматически получать настройки DNS.
После этого я могу изменить настройки DNS через:
networksetup -switchtolocation Home
Это очень близко к моему требованию. Но я надеюсь, что смогу найти более умный способ. Если я найду способ. Если я подключусь к Wi-Fi под названием «Домашний», а затем автоматически выполню команду, все будет отлично.
20200819 Обновить
Я нахожу инструмент автоматизации под названием Hammerspoon , поэтому могу назначить ярлык для переключения различных местоположений с помощью команды.
Хотя прямого пути не нашел, но Hammerspoon отличный и мощный. Я пытался наблюдать за изменением Wi-Fi с помощью Hammerspoon, но это остается небольшой проблемой, поэтому я открываю проблему здесь
Ответы
Keyboard Maestro может сделать это очень легко:

Установите SSID и местоположение, которые вы хотите, и это должно делать то, что вы хотите.
Вам не нужно использовать стороннее приложение для достижения цели.
Когда Wi-Fi подключается к сети , среди прочего, изменяется следующий файл :
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
Вы можете использовать User Launch Agent с ключом WatchPaths, чтобы узнать, когда целевой файл был изменен, и выполнить свой сценарий соответствующим образом.
Ниже приведен пример того , как достичь цели и использует SkyNet как SSID в Wi-Fi сети .
Использование networksetup
для получения текущего Wi-Fi сети , следующий пример сценария оболочки код используется и сохраняется как , например /usr/local/bin/detect-wifi-change
:
#!/bin/bash
[[ $(networksetup -getairportnetwork en0) == "Current Wi-Fi Network: SkyNet" ]] && say "connected to skynet"
В примере кода выше, когда Wi-Fi подключен к SkyNet он просто говорит , что это «связано с SkyNet», и вы бы заменить SkyNet в $(...)
части команды с вашей целевой SSID , и заменить say "connected to skynet"
команду с networksetup -switchtolocation Home
командой , как показано в ваш вопрос.
Для агента запуска в библиотеке вашей домашней папки вы должны использовать следующий пример, сохраненный, например, как ~/Library/LaunchAgents/com.my.detect.wifi.change.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>Label</key>
<string>com.my.detect.wifi.change</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>/usr/local/bin/detect-wifi-change</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
</array>
</dict>
</plist>
После сохранения PLIST файла , используйте launchctl
для load
него, например:
launchctl load ~/Library/LaunchAgents/com.my.detect.wifi.change.plist
Примечание: Вы можете использовать unload
глагол с launchctl
разгружать целевую PLIST файл .
Теперь всякий раз, когда Wi-Fi подключается к другому SSID, например /usr/local/bin/detect-wifi-change
, выполняется, а при подключении к целевому SSID выполняется команда после &&
.
Примечание. Приведенный выше пример был протестирован и работал под macOS High Sierra с использованием моего фактического SSID вместо SkyNet в обоих местах сценария .
Связанная документация:
В Терминале замените command
одно из следующего:
launchd
launchd.plist
launchctl
Вы можете прочитать страницу руководства для command
в терминале путем ввода , command
а затем щелкните правой кнопкой мыши на ней и выберите: Открыть страницу человек
Смотрите также: