Как автоматически переключать настройки DNS при подключении к другому WiFi?

Aug 17 2020

У меня совершенно разные настройки DNS, когда я на работе и дома. Мне было интересно, могу ли я автоматически изменять настройки DNS моего MacBook Pro при подключении к другому Wi-Fi.

Я много искал, в настройках сети сделал собственное Местоположение под названием Дом. И я установил свои настройки домашнего DNS в этом профиле. И профиль по умолчанию под названием «Автоматический». Я позволяю компьютеру автоматически получать настройки DNS.

После этого я могу изменить настройки DNS через:

networksetup -switchtolocation Home

Это очень близко к моему требованию. Но я надеюсь, что смогу найти более умный способ. Если я найду способ. Если я подключусь к Wi-Fi под названием «Домашний», а затем автоматически выполню команду, все будет отлично.

20200819 Обновить

Я нахожу инструмент автоматизации под названием Hammerspoon , поэтому могу назначить ярлык для переключения различных местоположений с помощью команды.

Хотя прямого пути не нашел, но Hammerspoon отличный и мощный. Я пытался наблюдать за изменением Wi-Fi с помощью Hammerspoon, но это остается небольшой проблемой, поэтому я открываю проблему здесь

Ответы

4 TJLuoma Aug 17 2020 at 23:44

Keyboard Maestro может сделать это очень легко:

Установите SSID и местоположение, которые вы хотите, и это должно делать то, что вы хотите.

3 user3439894 Aug 19 2020 at 01:06

Вам не нужно использовать стороннее приложение для достижения цели.

Когда 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а затем щелкните правой кнопкой мыши на ней и выберите: Открыть страницу человек

Смотрите также: