Mac OS X IP-Konfiguration automatisch nach Standort ändern (nach Wifi-Netzwerk)?

10

Kann Mac OS X so eingerichtet werden, dass seine Flughafenschnittstelle automatisch mit einer statischen IP-Adresse konfiguriert wird, wenn eine Verbindung zu einem WLAN-Netzwerk mit einem bestimmten Namen besteht und in allen anderen WLAN-Netzwerken DHCP verwendet wird?

Derzeit verwende ich die Funktion "Standorte" im Abschnitt "Netzwerk" in den Systemeinstellungen, um manuell zwischen zwei IP-Adress-Setups zu wechseln. Ich habe ein Setup für "meine statische IP" und ein Standard-Setup für "DHCP". Dies erfordert jedoch die Eingabe der Systemeinstellungen, um die Dropdown-Liste Standort jedes Mal zu ändern, wenn Sie den Standort wechseln. Kann das automatisiert werden?

Dies würde vorzugsweise ohne Software von Drittanbietern erfolgen.

Markus Hallmann
quelle

Antworten:

8

Dies kann nicht einfach über das Betriebssystem erfolgen.

Die oben genannten Standorte sind eine Option, zusammen mit Freeware Airport Location oder MarcoPolo oder Paid Network Location. Es gibt auch ein AppleScript namens WiFiScriptor, das helfen könnte.

Jedoch! Sie müssen nicht in die Systemeinstellungen -> Netzwerk -> [Dropdown-Liste Standort] gehen. Sie können das Apple-Menü durchgehen -> Standort (ca. 6 Optionen nach unten) -> [Wählen Sie den gewünschten Standort aus]

-b

supreme_b_ing
quelle
1
Vielen Dank für den Tipp zum Wechseln des Standorts über das Apple-Menü. Obwohl immer noch manuell, fühlt sich das zumindest ein wenig besser an, als mit mehreren Schritten in die Systemeinstellungen zu gehen.
Markus Hallmann
Vielen Dank auch für die Bestätigung, dass dies (derzeit) ohne Software von Drittanbietern nicht möglich ist.
Markus Hallmann
Der Link zum Standort des Flughafens scheint jetzt auf eine Spam-Website zu verweisen
Nat
9

Auf Dritte kann verzichtet werden, siehe https://github.com/rimar/wifi-location-changer

Yuval Rimar
quelle
2
Ich möchte nur hinzufügen, dass Ihr Standortname mit der SSID des WLAN-Netzwerks übereinstimmen sollte, damit dies funktioniert. Die Logik des Skripts besteht darin, dass es nach einem Speicherort mit einem der SSID ähnlichen Namen sucht und zu diesem wechselt. Wenn es keinen Ort mit diesem Namen gibt, wird standardmäßig auto / Automatic verwendet.
Rystraum
Außerdem musste ich mich abmelden und wieder anmelden, bevor es mit Yosemite funktioniert.
djule5
1

Eine nicht kostenlose Lösung von Drittanbietern, die wahrscheinlich für Sie funktionieren würde, ist Locations .

Wie in dieser Antwort auf eine ähnliche, aber nicht identische Frage zum Stapelüberlauf vorgeschlagen, können Sie ein Skript erstellen, das in regelmäßigen Abständen ausgeführt wird. launchdverhindert, dass es mehr als einmal ausgeführt wird.

Pseudocode:

  • Holen Sie sich den Wert saved_wifi aus einer Datei
  • setze current_wifi auf Ausgabe von networksetup -getairportnetwork AirPort
  • Wenn saved_wifi == current_wifi, beenden Sie das Programm
  • Andernfalls führen Sie aus, networksetup -switchtolocation {location}wobei {location} der Name des Standorts ist, zu dem Sie wechseln möchten, basierend auf dem gefundenen WLAN-Netzwerk.

Hier kann es zu einer Henne-Ei-Situation kommen, wenn eine Verbindung zu lokalem WLAN hergestellt wird, das keine DHCP-Adresse bereitstellt, während Sie so konfiguriert sind, dass Sie eine Adresse von DHCP erwarten.

- -

Update: Möglicherweise doppelte Frage gefunden, die eine OpenSource-Lösung vorschlägt: MarcoPolo

Doug Harris
quelle
1

Da die angegebene Antwort manuell ist, finden Sie hier ein einfaches Skript, das sie automatisch ändert:

Erstellen Sie unter Systemeinstellungen> Netzwerk verschiedene Speicherorte, um jedes Ihrer WiFi-Netzwerke wiederzugeben.

Skript: ( /usr/bin/autolocation.sh) Platzieren Sie dies an einem von Ihnen bevorzugten Ort und ändern Sie die SSID-Werte im Skript entsprechend Ihrem Szenario.

#!/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}"

Dieses Skript ändert den Netzwerkspeicherort (Einstellungen) basierend auf der SSID des drahtlosen Netzwerks. Dies muss nun ausgeführt werden, wenn sich die Netzwerkeinstellungen ändern. Wir werden einen Startagenten erstellen, um dasselbe zu tun.

Startliste: ( ~/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>

Ich habe diese Datei in ~/Library/LaunchAgents(in meinem Home-Verzeichnis) erstellt, da ich der einzige Benutzer bin, der diesen Computer verwendet. Wenn Sie möchten, dass es global ist, geben Sie es ein /Library/LaunchAgents.

Diese Datei muss Eigentum von sein rootund über folgende 600Berechtigungen verfügen :

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

Sobald Sie sich abmelden / anmelden oder das System neu starten, startet der Startagent, je nachdem, wo Sie die Datei abgelegt haben (Ihr Ausgangsverzeichnis oder global). Wenn Sie dies jedoch nicht möchten und es jetzt laden möchten, führen Sie Folgendes in der Befehlszeile aus. Sie müssen es nur einmal tun.

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

Das ist es. Jetzt ändert sich die IP Ihres Mac automatisch.

Hinweis: Funktioniert auch bei El Capitan!

Vij Vijay
quelle
1

Einführung in Location Changer

Hier ist ein vielversprechendes Skript zum Ändern von Netzwerkstandorten basierend auf der WiFi-SSID:

Es wird von Anton Eprev erstellt . Sie können den Code und eine detailliertere Dokumentation auf GitHub anzeigen:

Installation

Es wird über die Befehlszeile installiert:

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

Sie werden nach einem Root-Passwort gefragt locationchanger, das im /usr/local/binVerzeichnis installiert werden soll .

Das ist es!

Wenn danach ein Netzwerkspeicherort vorhanden ist, dessen Name mit dem Namen (SSID) des aktuellen WiFi-Netzwerks identisch ist , wird automatisch zum Netzwerkspeicherort gewechselt. Andernfalls wird auf Automatische Position umgeschaltet . (Übrigens, wenn es keinen Ort namens Automatisch gibt , beschwert es sich in Protokollen und beendet.)

Standortspezifisches Skript

Wenn Sie jedes Mal, wenn Sie eine Verbindung zu einem bestimmten WiFi-Netzwerk herstellen, ein Skript ausführen möchten, fügen Sie diese Skripte ein ~/.locationsund benennen Sie sie nach WiFi-Netzwerken, z ~/.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'

Und vielleicht möchten Sie eine erstellen ~/.locations/Automatic, die diese Änderungen an anderen Speicherorten zurücksetzt:

#!/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'

Stellen Sie sicher, dass Ausführungsbits in Skripten umgewandelt werden ( chmod +x).

Standort-Aliase

Sie können einen Netzwerkstandort für mehrere WiFi-Netzwerke freigeben. Wenn Sie beispielsweise einen WLAN-Router haben, der gleichzeitig im 2,4- und 5-GHz-Band sendet, können Sie eine Konfigurationsdatei erstellen ~/.locations/locations.confund einfache Schlüssel-Wert-Paare einfügen:

Home_WiFi_5GHz=Home_WiFi

Hier sind Schlüssel WiFi-Netzwerknamen und Werte sind entsprechende Netzwerkstandorte . Verbinden Sie sie mit bloßen Gleichheitszeichen ( =ohne Leerzeichen). Wenn im obigen Beispiel das WiFi-Netzwerk Home_WiFi_5GHz verbunden ist, wechselt es zum Netzwerkspeicherort Home_WiFi .

Beachten Sie, dass Standort-Aliase Vorrang vor der gleichnamigen Regel haben. Im obigen Beispiel wird nur ein Skript ~/.locations/Home_WiFiausgeführt, wenn Sie eine Verbindung zum WiFi-Netzwerk Home_WiFi_5GHz herstellen .

Mit Standort-Aliasnamen müssen Sie nicht einmal zusätzliche Netzwerkstandorte für übereinstimmende Namen von WiFi-Netzwerken erstellen.

Fehlerbehebung

Mit dem folgenden Befehl können Sie umfangreiche Protokolle anzeigen:

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

Beispielausgabe:

[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)

Deinstallation

Entladen Sie zunächst den Startagenten:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Entfernen Sie dann die Binär-, Plist- und Protokolldatei:

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

Sie können auch Konfigurationsdateien und standortspezifische Skripts entfernen ~/.locations:

rm -rf ~/.locations
Rockallite
quelle