Come cambiare automaticamente le impostazioni DNS durante la connessione a un WiFi diverso?

Aug 17 2020

Ho impostazioni DNS completamente diverse quando sono al lavoro e quando sono a casa. Mi chiedevo se posso modificare automaticamente le impostazioni DNS del mio MacBook Pro quando mi collego a un WiFi diverso.

Ho fatto molte ricerche, ho creato una posizione personalizzata chiamata Casa nelle impostazioni di rete. E ho impostato le mie impostazioni DNS per la casa sotto questo profilo. E un profilo predefinito chiamato Automatico consente al computer di ottenere automaticamente le impostazioni DNS.

Successivamente, posso modificare le mie impostazioni DNS tramite:

networksetup -switchtolocation Home

È molto vicino alla mia richiesta. Ma spero di poter trovare un modo più intelligente, se trovo un metodo se mi connetto a un WiFi chiamato "Home", e poi eseguo il comando automaticamente, sarà eccellente.

20200819 Aggiornamento

Trovo uno strumento di automazione chiamato Hammerspoon , quindi posso assegnare una scorciatoia per cambiare posizioni diverse usando il comando.

Anche se non ho trovato un modo diretto, Hammerspoon è ottimo e potente. Ho provato a guardare il cambio di Wifi usando Hammerspoon, ma rimane un piccolo problema, quindi apro un problema qui

Risposte

4 TJLuoma Aug 17 2020 at 23:44

Keyboard Maestro può farlo molto facilmente:

Imposta l'SSID e la posizione che desideri e dovrebbe fare quello che vuoi.

3 user3439894 Aug 19 2020 at 01:06

Non è necessario utilizzare un terze parti applicazione per raggiungere il tuo obiettivo.

Quando il Wi-Fi si connette a una rete, il seguente file , tra gli altri, viene modificato:

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

È possibile utilizzare un agente di avvio utente con una chiave WatchPaths per sapere quando il file di destinazione viene modificato ed eseguire lo script di conseguenza.

Quanto segue è un esempio di come per raggiungere l'obiettivo e sta usando SkyNet come lo SSID della connessione Wi-Fi della rete .

Usando networksetupper ottenere la rete Wi-Fi corrente , il seguente codice di script di shell di esempio viene utilizzato e salvato come ad esempio : /usr/local/bin/detect-wifi-change

#!/bin/bash

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

Nel codice di esempio sopra, quando il Wi-Fi è connesso a SkyNet , dice semplicemente che è "connesso a skynet" e dovresti sostituire SkyNet nella $(...)parte del comando con il tuo SSID di destinazione , e sostituire il say "connected to skynet" comando con il networksetup -switchtolocation Home comando come mostrato in la tua domanda.

Per il Launch Agent , nella Libreria della tua cartella Home dovresti usare il seguente esempio, salvato come, ad esempio ,:~/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>

Dopo aver salvato il file PLIST , usalo , ad esempio:launchctlload

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

Nota: è possibile utilizzare il unload verbo con launchctlper scaricare il file PLIST di destinazione .

Ora, ogni volta che il Wi-Fi si connette a un SSID diverso, /usr/local/bin/detect-wifi-changeviene eseguito eg e, se connesso all'SSID di destinazione, viene eseguito il comando dopo &&.


Nota: l'esempio sopra è stato testato e ha funzionato con macOS High Sierra utilizzando il mio attuale SSID al posto di SkyNet in entrambi i punti dello script .


 

Documentazione correlata:

In Terminal , sostituire commanduno dei seguenti:

  • launchd
  • launchd.plist
  • launchctl

È possibile leggere la pagina di manuale per command in Terminale digitando, commandquindi fare clic con il pulsante destro del mouse su di essa e selezionare: Apri pagina man

Guarda anche:

  • Un tutorial sul lancio
  • Guida alla programmazione di demoni e servizi
  • Nota tecnica TN2083 Daemons and Agents