Como alternar automaticamente as configurações de DNS ao conectar-se a um WiFi diferente?

Aug 17 2020

Tenho configurações de DNS totalmente diferentes quando estou no trabalho e quando estou em casa. Gostaria de saber se posso alterar as configurações DNS do meu MacBook Pro automaticamente quando me conectar a um Wi-Fi diferente.

Fiz muitas pesquisas, criei um local personalizado chamado Casa nas configurações de rede. E eu defino minhas configurações de DNS doméstico neste perfil. E um perfil padrão chamado Automático, eu deixo o computador obter automaticamente as configurações de DNS.

Depois disso, posso alterar minhas configurações de DNS por meio de:

networksetup -switchtolocation Home

Está muito próximo da minha demanda. Mas espero poder encontrar uma maneira mais inteligente, se eu descobrir um método, se eu me conectar a um WiFi chamado "Home", e depois executar o comando automaticamente, será excelente.

Atualização 20200819

Eu encontro uma ferramenta de automação chamada Hammerspoon , então posso atribuir um atalho para alternar diferentes locais usando o comando.

Embora eu não tenha encontrado uma maneira direta, mas Hammerspoon é grande e poderoso. Tentei assistir à mudança de Wifi usando Hammerspoon, mas continua sendo um pequeno problema, então abro um problema aqui

Respostas

4 TJLuoma Aug 17 2020 at 23:44

O Keyboard Maestro pode fazer isso facilmente:

Defina o SSID e o local que você deseja, e isso deve fazer o que você quiser.

3 user3439894 Aug 19 2020 at 01:06

Você não precisa usar um aplicativo de terceiros para atingir seu objetivo.

Quando o Wi-Fi se conecta a uma rede, o seguinte arquivo , entre outros, é modificado:

/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist

Você pode usar um User Launch Agent com uma chave WatchPaths para saber quando o arquivo de destino é modificado e executar seu script de acordo.

O seguinte é um exemplo de como realizar o objectivo e é utilizando SkyNet como o SSID do Wi-Fi rede .

Usando networksetuppara obter a rede Wi-Fi atual , o seguinte código de script de shell de exemplo é usado e salvo como, por exemplo : /usr/local/bin/detect-wifi-change

#!/bin/bash

[[ $(networksetup -getairportnetwork en0) == "Current Wi-Fi Network: SkyNet" ]] && say "connected to skynet"

No código de exemplo acima, quando o Wi-Fi está conectado à SkyNet, ele simplesmente diz que está "conectado à skynet" e você deve substituir a SkyNet na $(...)parte do comando pelo SSID de destino e substituir o say "connected to skynet" comando pelo networksetup -switchtolocation Home comando conforme mostrado em sua pergunta.

Para o Launch Agent , na Biblioteca de sua pasta Home, você usaria o seguinte exemplo, salvo como, por exemplo :~/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>

Depois de salvar o arquivo PLIST , use - o, por exemplo:launchctlload

launchctl load ~/Library/LaunchAgents/com.my.detect.wifi.change.plist

Nota: Você pode usar o unload verbo com launchctlpara descarregar o arquivo PLIST de destino .

Agora, sempre que o Wi-Fi se conecta a um SSID diferente, o exemplo /usr/local/bin/detect-wifi-changeé executado e, se conectado ao SSID alvo, o comando após o &&é executado.


Observação: o exemplo acima foi testado e funcionou no macOS High Sierra usando meu SSID real no lugar do SkyNet em ambos os locais do script .


 

Documentação relacionada:

No Terminal , substitua commandpor um dos seguintes:

  • launchd
  • launchd.plist
  • launchctl

Você pode ler a página de manual para command no Terminal de digitação commande, em seguida, clique com botão direito sobre ele e selecione: homem Abrir página

Veja também: