Comment changer automatiquement les paramètres DNS tout en vous connectant à un WiFi différent?

Aug 17 2020

J'ai des paramètres DNS totalement différents lorsque je suis au travail et quand je suis à la maison. Je me demandais si je pouvais modifier automatiquement les paramètres DNS de mon MacBook Pro lorsque je me connectais à un réseau Wi-Fi différent.

J'ai fait beaucoup de recherches, j'ai créé un emplacement personnalisé appelé Domicile dans les paramètres réseau. Et j'ai défini mes paramètres DNS domestiques sous ce profil. Et un profil par défaut appelé Automatique, je laisse l'ordinateur obtenir automatiquement les paramètres DNS.

Après cela, je peux modifier mes paramètres DNS via:

networksetup -switchtolocation Home

C'est très proche de ma demande. Mais j'espère que je peux trouver un moyen plus intelligent, si je trouve une méthode Si je me connecte à un WiFi appelé "Home", puis exécute la commande automatiquement, ce sera excellent.

20200819 Mise à jour

Je trouve un outil d'automatisation appelé Hammerspoon , je peux donc attribuer un raccourci pour changer de lieu à l'aide de la commande.

Bien que je n'ai pas trouvé de moyen direct, mais Hammerspoon est génial et puissant. J'ai essayé de regarder le changement de Wifi en utilisant Hammerspoon, mais cela reste un petit problème, alors j'ouvre un problème ici

Réponses

4 TJLuoma Aug 17 2020 at 23:44

Keyboard Maestro peut le faire très facilement:

Définissez le SSID et l'emplacement que vous souhaitez, et cela devrait faire ce que vous voulez.

3 user3439894 Aug 19 2020 at 01:06

Vous n'avez pas besoin d'utiliser une application tierce pour atteindre votre objectif.

Lorsque le Wi-Fi se connecte à un réseau, le fichier suivant , entre autres, est modifié:

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

Vous pouvez utiliser un User Launch Agent avec une clé WatchPaths pour savoir quand le fichier cible est modifié et exécuter votre script en conséquence.

Voici un exemple de la façon d'atteindre l'objectif et utilise SkyNet comme le SSID du Wi-Fi réseau .

En utilisant networksetuppour obtenir le courant Wi-Fi réseau , le suivant exemple script shell le code est utilisé et enregistré comme par exemple /usr/local/bin/detect-wifi-change:

#!/bin/bash

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

Dans l'exemple de code ci-dessus, lorsque le Wi-Fi est connecté à SkyNet, il indique simplement qu'il est "connecté à skynet", et vous remplacez SkyNet dans la $(...)partie de la commande par votre SSID cible , et remplacez la say "connected to skynet" commande par la networksetup -switchtolocation Home commande comme indiqué dans ta question.

Pour l' agent de lancement , dans la bibliothèque de votre dossier d' accueil , vous utiliseriez l'exemple suivant, enregistré sous, par exemple ~/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>

Après avoir enregistré le PLIST fichier , utilisez launchctlpour loadcela, par exemple:

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

Remarque: vous pouvez utiliser le unload verbe with launchctlpour décharger le fichier PLIST cible .

Désormais, chaque fois que le Wi-Fi se connecte à un SSID différent, le eg /usr/local/bin/detect-wifi-changeest exécuté et s'il est connecté au SSID cible, la commande après le &&est exécutée.


Remarque: l'exemple ci-dessus a été testé et a fonctionné sous macOS High Sierra en utilisant mon SSID réel à la place de SkyNet aux deux endroits du script .


 

Documentation connexe:

Dans Terminal , remplacez l' commandun des éléments suivants:

  • launchd
  • launchd.plist
  • launchctl

Vous pouvez lire la page de manuel pour command dans Terminal en tapant commandpuis en cliquant dessus avec le bouton droit de la souris et en sélectionnant: Ouvrir la page de manuel

Voir également: