Mac OS X modifie-t-il automatiquement la configuration IP par emplacement (par réseau Wifi)?

10

Mac OS X peut-il être configuré pour configurer automatiquement son interface Airport avec une adresse IP statique lorsqu'il est connecté à un réseau Wifi avec un certain nom, et sur tous les autres réseaux Wifi utiliser DHCP?

Actuellement, j'utilise la fonction "Emplacements" de la section "Réseau" dans les Préférences Système pour basculer manuellement entre deux configurations d'adresse IP. J'ai une configuration «mon IP statique» et une configuration par défaut «DHCP». Cependant, cela nécessite d'entrer dans les Préférences Système pour modifier la liste déroulante Emplacement à chaque fois que vous changez d'emplacement. Cela peut-il être automatisé?

De préférence, cela se ferait sans logiciel tiers.

Markus Hallmann
la source

Réponses:

8

Ce n'est pas quelque chose qui peut être fait simplement via le système d'exploitation.

Les emplacements susmentionnés sont une option, avec l' emplacement gratuit de l' aéroport ou MarcoPolo ou l'emplacement réseau payant. Il existe également un AppleScript appelé WiFiScriptor qui pourrait vous aider.

Toutefois! vous n'avez pas besoin d'aller dans les Préférences Système -> Réseau -> [liste déroulante Emplacement]. Vous pouvez passer par le menu Apple -> Emplacement (environ 6 options vers le bas) -> [sélectionnez l'emplacement que vous souhaitez]

-b

supreme_b_ing
la source
1
Merci pour le conseil sur le changement d'emplacement à partir du menu Apple. Bien que toujours manuel, cela semble au moins un peu mieux que d'entrer dans les Préférences Système en plusieurs étapes.
Markus Hallmann
Merci également d'avoir confirmé qu'il n'est pas (actuellement) possible de le faire sans logiciel tiers.
Markus Hallmann
le lien Airport Location semble pointer vers un site de spam maintenant
Nat
9

Il est possible de se passer de tiers, voir https://github.com/rimar/wifi-location-changer

Yuval Rimar
la source
2
Je voudrais juste ajouter que pour que cela fonctionne, le nom de votre emplacement doit être le même que le SSID du réseau wifi. La logique du script est qu'il recherche un emplacement avec un nom similaire au SSID et passe à celui-ci. S'il n'y a aucun emplacement avec ce nom, il est par défaut auto / Automatic.
Rystraum
De plus, j'ai dû me déconnecter et me reconnecter avant de commencer à travailler sur Yosemite.
djule5
1

Une solution tierce non gratuite qui fonctionnerait probablement pour vous est Locations .

Comme suggéré par cette réponse à une question similaire, mais pas identique, sur stackoverflow, vous pouvez créer un script qui s'exécute à intervalle régulier. launchdl'empêchera de fonctionner plus d'une fois.

Psuedocode:

  • obtenir la valeur save_wifi d'un fichier
  • définissez current_wifi sur la sortie de networksetup -getairportnetwork AirPort
  • si saved_wifi == current_wifi, quittez
  • sinon, exécutez networksetup -switchtolocation {location}où {location} est le nom de l'emplacement vers lequel vous souhaitez basculer en fonction du réseau wifi trouvé.

Il peut y avoir une situation de poule et d'oeuf ici avec la connexion au wifi local qui ne fournit pas d'adresse DHCP pendant que vous êtes configuré pour attendre une adresse de DHCP.

-

Mise à jour: a trouvé une question en double possible qui suggère une solution open source: MarcoPolo

Doug Harris
la source
1

Puisque la réponse donnée est manuelle, voici un script simple qui la modifie automatiquement:

Créez divers emplacements dans Préférences Système> Réseau pour refléter chacun de vos réseaux WiFi.

Script: ( /usr/bin/autolocation.sh) Mettez ceci à un endroit que vous préférez et modifiez les valeurs SSID dans le script en fonction de votre scénario.

#!/bin/sh

#get the ssid of the network we are on
ssid=`ioreg -l -n AirPortDriver | grep 80211SSID | sed 's/|//g' | sed 's/"//g' | sed 's/  */ /g' | awk '{print $3}'`

if [ $ssid = "voicegear" ]
then
        location="Office / Home"
elif [ $ssid = "vijay" ]
then
        location="Office / Home"
elif [ $ssid = "SCTHO" ]
then
        location="Shriram Santhome"
else
        location="Automatic"
fi

#update the location
newloc=`/usr/sbin/scselect "${location}" | sed 's/^.*(\(.*\)).*$/\1/'`

echo "${newloc}"

Ce script changera l'emplacement du réseau (paramètres) en fonction du SSID du réseau sans fil. Maintenant, cela doit être exécuté chaque fois qu'il y a un changement dans les paramètres réseau. Nous allons créer un agent launchd pour faire de même.

launchd plist: ( ~/Library/LaunchAgents/com.vg.netwatcher.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>Disabled</key>
        <false/>
        <key>Label</key>
        <string>com.vg.netwatcher</string>
        <key>Program</key>
        <string>/usr/bin/autolocation.sh</string>
        <key>LaunchEvents</key>
        <dict>
                <key>com.apple.notifyd.matching</key>
                <dict>
                        <key>com.apple.system.config.network_change</key>
                        <dict>
                                <key>Notification</key>
                                <string>com.apple.system.config.network_change</string>
                        </dict>
                </dict>
        </dict>
        <key>KeepAlive</key>
        <true/>
</dict>
</plist>

J'ai créé ce fichier dans ~/Library/LaunchAgents(à l'intérieur de mon répertoire personnel) car je suis le seul utilisateur à utiliser cette machine. Si vous voulez qu'elle soit globale, insérez-la /Library/LaunchAgents.

Ce fichier doit appartenir à rootet disposer des 600autorisations:

sudo chown root Library/LaunchAgents/com.vg.netwatcher.pist
sudo chmod 600 Library/LauhchAgents/com.vg.netwatcher.plist

Une fois que vous vous déconnectez / vous connectez ou redémarrez le système, l'agent de lancement démarre et commence à fonctionner en fonction de l'endroit où vous avez placé le fichier (votre répertoire personnel ou global). Mais si vous ne voulez pas faire cela et que vous voulez qu'il se charge maintenant, exécutez ce qui suit sur la ligne de commande. Vous ne devez le faire qu'une seule fois.

cd ~/Library/LaunchAgents
sudo launchctl load -w com.vg.netwatcher.plist

C'est ça. Maintenant, l'IP de votre Mac changera automatiquement.

Remarque: Fonctionne également sur El Capitan!

Vij Vijay
la source
1

Présentation de Changer l'emplacement

Voici un script très prometteur pour changer l'emplacement du réseau en fonction du SSID WiFi:

Il est créé par Anton Eprev . Vous pouvez afficher le code et une documentation plus détaillée sur GitHub:

Installation

Il s'installe via la ligne de commande:

$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash

Il vous demandera un mot de passe root à installer locationchangerdans le /usr/local/binrépertoire.

C'est ça!

Après cela, s'il existe un emplacement réseau dont le nom est identique au nom (SSID) du réseau WiFi actuel , il passera automatiquement à l'emplacement réseau. Sinon, il passera à l' emplacement automatique . (BTW, s'il n'y a aucun emplacement appelé Automatic , il se plaint dans les journaux et se ferme.)

Script spécifique à l'emplacement

Si vous souhaitez exécuter un script chaque fois que vous vous connectez à un réseau WiFi spécifique, placez ces scripts ~/.locationset nommez-les d'après les réseaux WiFi, par exemple ~/.locations/Corp Wi-Fi:

#!/usr/bin/env bash

# Require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to true'

Et vous voudrez peut-être créer ~/.locations/Automaticqui réinitialisera ces modifications dans d'autres emplacements:

#!/usr/bin/env bash

# Don’t require password immediately after sleep or screen saver begins
osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'

Assurez-vous de lancer des bits d'exécution sur des scripts ( chmod +x).

Alias ​​d'emplacement

Vous pouvez partager un emplacement réseau entre plusieurs réseaux WiFi. Par exemple, si vous avez un routeur sans fil qui diffuse sur des bandes 2,4 et 5 GHz en même temps, vous pouvez créer un fichier de configuration ~/.locations/locations.confet mettre des paires clé-valeur simples à l'intérieur:

Home_WiFi_5GHz=Home_WiFi

Ici, les clés sont des noms de réseau WiFi et les valeurs sont des emplacements de réseau correspondants . Rejoignez-les avec des signes nus égaux ( =, sans espaces). Dans l'exemple ci-dessus, si le réseau WiFi Home_WiFi_5GHz est connecté, il basculera vers l'emplacement réseau Home_WiFi .

Notez que les alias d'emplacement ont priorité sur la règle du même nom. Dans l'exemple ci-dessus, seul le script ~/.locations/Home_WiFis'exécutera lorsque vous vous connecterez au réseau WiFi Home_WiFi_5GHz .

Avec les alias de localisation, vous n'avez même pas besoin de créer des emplacements de réseau supplémentaires pour faire correspondre les noms des réseaux WiFi.

Dépannage

Vous pouvez afficher des journaux détaillés avec la commande suivante:

$ tail -f ~/Library/Logs/LocationChanger.log

Exemple de sortie:

[2017-10-13 11:35] Connected to 'Unknown WiFi'
[2017-10-13 11:35] Location 'Unknown WiFi' was not found. Will default to 'Automatic'
[2017-10-13 11:35] Changing the location to 'Automatic'
CurrentSet updated to 6B593A12-C51B-3FF1-DE1D-87310F232147 (Automatic)
[2017-10-13 11:37] Connected to 'Home_WiFi_5GHz'
[2017-10-13 11:37] Will switch the location to 'Home_WiFi' (configuration file)
[2017-10-13 11:37] Changing the location to 'Home_WiFi'
CurrentSet updated to 7900D1E6-3820-50C6-882E-4F5K2BEF32ED (Home_WiFi)

Désinstallation

Tout d'abord, déchargez l'agent de lancement:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Ensuite, supprimez le fichier binaire, plist et journal:

rm ~/Library/LaunchAgents/LocationChanger.plist
rm ~/Library/Logs/LocationChanger.log
sudo rm /usr/local/bin/locationchanger

Vous pouvez également supprimer les fichiers de configuration et les scripts spécifiques à l'emplacement à l'intérieur ~/.locations:

rm -rf ~/.locations
Rockallite
la source