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

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

Derzeit verwende ich die Funktion" Standorte "des Abschnitts" Netzwerk " in den Systemeinstellungen, um manuell zwischen zwei IP-Adresseinstellungen zu wechseln. Ich habe ein" Meine statische IP "- Setup und ein Standard - "DHCP" - Setup. Dies erfordert jedoch die Eingabe von Systemeinstellungen, um die Standort Drop-down jedes Mal, wenn Standorte wechseln. Kann das automatisiert werden?

Dies wäre vorzugsweise ohne Software von Drittanbietern möglich.

Author: Doug Harris, 2011-01-07

5 answers

Dies kann nicht einfach über das Betriebssystem erfolgen.

Die oben genannten Standorte ist eine Option, zusammen mit Freeware Flughafen Lage oder MarcoPolo oder bezahlten Netzwerkstandort. Es gibt auch ein AppleScript namens WiFiScriptor, das helfen könnte.

Jedoch! Sie müssen nicht in die Systemeinstellungen von gehen->Netzwerk - >[Dropdown-Liste Standort] . Sie können durch das Apple-Menü gehen->Lage (über 6 optionen unten) - >[wählen der gewünschte Ort]

-b

 8
Author: supreme_b_ing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-01-07 21:31:31

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

 9
Author: Yuval Rimar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-03-06 23:11:22

Eine dritte, nicht freie Lösung, die wahrscheinlich für Sie funktionieren würde, ist oder.

Wie von diese Antwort auf eine ähnliche, aber nicht identische Frage zum Stackoverflow vorgeschlagen, können Sie ein Skript erstellen, das in einem regulären Intervall ausgeführt wird. launchd verhindert, dass es mehr als einmal ausgeführt wird.

Psuedocode:

  • saved_wifi-Wert aus einer Datei abrufen
  • setze current_wifi auf die Ausgabe von networksetup -getairportnetwork AirPort
  • wenn saved_wifi == current_wifi, ausgang
  • else run networksetup -switchtolocation {location}, wo {location} ist der name der Position, die Sie wollen, um Schalter zu auf der Basis der wifi-Netzwerk gefunden.

Es könnte hier eine Hühner-Ei-Situation mit einer Verbindung zu lokalem WLAN geben, die keine DHCP-Adresse bereitstellt, während Sie so konfiguriert sind, dass Sie eine Adresse von DHCP erwarten.

--

Update: mögliche [[28]}doppelte Frage gefunden, die eine Opensource-Lösung vorschlägt: MarcoPolo

 1
Author: Doug Harris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-05-23 12:41:40

Da die gegebene Antwort manuell ist, ist hier ein einfaches Skript, das es automatisch ändert:

Erstellen Sie verschiedene Standorte in Systemeinstellungen > Netzwerk, um jedes Ihrer WLAN-Netzwerke widerzuspiegeln.

Script: (/usr/bin/autolocation.sh) Setzen Sie diese an einem Ort, den Sie bevorzugen, 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. Jetzt muss dies immer dort ausgeführt werden ist eine Änderung der Netzwerkeinstellungen. Wir erstellen einen Launchd-Agenten, um dasselbe zu tun.

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>

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

Diese Datei muss im Besitz von root sein und über 600 Berechtigungen 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, beginnt der Startagent zu arbeiten, je nachdem, wo Sie die Datei abgelegt haben (ihr Zuhause dir oder global). Wenn Sie dies jedoch nicht möchten und 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 war ' s. Jetzt ändert sich die IP Ihres Mac automatisch.

Hinweis: Funktioniert auch auf El Capitan!

 1
Author: Vij Vijay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-04-26 04:27:45

Einführung Location Changer

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

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

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, um locationchanger im Verzeichnis /usr/local/bin zu installieren.

Das ist es!

Wenn es danach einen Netzwerkstandort gibt, dessen Name mit dem Namen (SSID) des aktuellen WLAN-Netzwerks identisch ist, wechselt er automatisch zum Netzwerkstandort. Andernfalls wird es zu wechseln Automatische Lage. (BTW, wenn es keinen Standort genannt Automatik, beschwert es sich in den Protokollen und beendet.)

Ortsspezifisches Skript

Wenn Sie jedes Mal ein Skript ausführen möchten, wenn Sie eine Verbindung zu einem bestimmten WLAN-Netzwerk herstellen, geben Sie diese Skripte in ~/.locations ein und benennen Sie sie nach WLAN-Netzwerken, z. B. ~/.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 Sie möchten vielleicht ~/.locations/Automatic erstellen, das diese Änderungen an anderen Orten 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'

Achten Sie darauf, Ausführungsbits auf Skripte (chmod +x).

Standort Aliase

Sie können einen Netzwerkstandort zwischen mehreren WLAN-Netzwerken teilen. Wenn Sie beispielsweise einen WLAN-Router haben, der gleichzeitig auf 2,4-und 5-GHz-Bändern sendet, können Sie eine Konfigurationsdatei ~/.locations/locations.conf erstellen und 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). In das obige Beispiel, wenn das WiFi-Netzwerk Home_WiFi_5GHz verbunden ist, wechselt es zum Netzwerkstandort Home_WiFi.

Beachten Sie, dass Standortaliase Vorrang vor der gleichnamigen Regel haben. Im obigen Beispiel wird nur script ~/.locations/Home_WiFi ausgeführt, wenn Sie eine Verbindung zum WiFi-Netzwerk herstellen Home_WiFi_5GHz.

Mit Standort-Aliasen müssen Sie nicht einmal zusätzliche Netzwerkstandorte für übereinstimmende Namen von WLAN erstellen Netze.

Fehlersuche

Sie können umfangreiche Protokolle mit dem folgenden Befehl 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 zuerst 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 ortsspezifische Skripte in ~/.locations entfernen:

rm -rf ~/.locations
 1
Author: Rockallite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-11-02 07:02:22