Mac OS X cambia automaticamente la configurazione IP in base alla posizione (tramite rete Wifi)?


10

Mac OS X può essere configurato per configurare automaticamente la sua interfaccia Airport con un indirizzo IP statico quando è collegato a una rete Wifi con un determinato nome e su tutte le altre reti Wifi utilizzare DHCP?

Attualmente sto usando la funzione "Posizioni" della sezione "Rete" in Preferenze di Sistema per passare manualmente da una configurazione di due indirizzi IP. Ho un'impostazione "mio IP statico" e un'impostazione "DHCP" predefinita. Tuttavia, ciò richiede l'immissione delle Preferenze di Sistema per modificare il menu a discesa Posizione ogni volta che si cambia posizione. Questo può essere automatizzato?

Preferibilmente questo sarebbe fatto senza software di terze parti.

Risposte:


8

Questo non è qualcosa che può essere fatto semplicemente attraverso il sistema operativo.

Le posizioni sopra menzionate sono un'opzione, insieme a Posizione aeroporto gratuita o MarcoPolo o Posizione di rete a pagamento. C'è anche un AppleScript chiamato WiFiScriptor che potrebbe aiutare.

Però! non è necessario accedere a Preferenze di Sistema -> Rete -> [Elenco a discesa Posizione]. Puoi accedere al menu Apple -> Posizione (circa 6 opzioni in basso) -> [seleziona la posizione desiderata]

-b


1
Grazie per il suggerimento su come cambiare posizione dal menu Apple. Sebbene sia ancora manuale, sembra almeno un po 'meglio che accedere alle Preferenze di Sistema con più passaggi.
Markus Hallmann,

Grazie anche per aver confermato che non è (attualmente) possibile farlo senza software di terze parti.
Markus Hallmann l'

il link Aeroporto Posizione sembra puntare a un sito Web di spam ora
Nat

9

È possibile fare a meno di terzi, vedere https://github.com/rimar/wifi-location-changer


2
Vorrei solo aggiungere che per farlo funzionare, il nome della tua posizione dovrebbe essere lo stesso del SSID della rete wifi. La logica dello script è che controlla una posizione con un nome simile al SSID e passa a quella. Se non esiste una posizione con quel nome, il valore predefinito è automatico / automatico.
Rystraum,

Inoltre, ho dovuto disconnettermi e riconnettermi prima che iniziasse a funzionare su Yosemite.
djule5,

1

Una soluzione di terze parti, non gratuita, che probabilmente funzionerebbe per te è Locations .

Come suggerito da questa risposta a una domanda simile, ma non identica, su StackOverflow, è possibile creare uno script che viene eseguito a intervalli regolari. launchdimpedirà l'esecuzione più di una volta.

psuedocodarlo:

  • ottenere il valore save_wifi da un file
  • imposta current_wifi su output di networksetup -getairportnetwork AirPort
  • se save_wifi == current_wifi, esci
  • altrimenti corri networksetup -switchtolocation {location}dove {location} è il nome della location a cui vuoi passare in base alla rete wifi trovata.

Potrebbe esserci una situazione di pollo e uova qui con la connessione al wifi locale che non fornisce un indirizzo DHCP mentre sei configurato per aspettarti un indirizzo dal DHCP.

-

Aggiornamento: trovata possibile domanda duplicata che suggerisce una soluzione opensource: MarcoPolo


1

Poiché la risposta fornita è manuale, ecco un semplice script che la modifica automaticamente:

Crea varie posizioni in Preferenze di Sistema> Rete per riflettere ciascuna delle tue reti WiFi.

Script: ( /usr/bin/autolocation.sh) Mettilo in una posizione che preferisci e modifica i valori SSID nello script in base al tuo scenario.

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

Questo script cambierà la posizione della rete (impostazioni) in base al SSID della rete wireless. Ora, questo deve essere eseguito ogni volta che c'è un cambiamento nelle impostazioni di rete. Creeremo un agente di avvio per fare lo stesso.

plist di lancio: ( ~/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>

Ho creato questo file in ~/Library/LaunchAgents(nella mia home directory ) poiché sono l'unico utente che utilizza questa macchina. Se vuoi che sia globale, inseriscilo /Library/LaunchAgents.

Questo file deve essere di proprietà roote disporre delle 600autorizzazioni:

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

Una volta effettuato il logout / login o riavviato il sistema, l'agente di avvio inizierà a funzionare a seconda della posizione in cui è stato inserito il file (dir home o globale). Ma se non vuoi farlo e vuoi caricarlo ora, esegui quanto segue sulla riga di comando. Devi farlo solo una volta.

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

Questo è tutto. Ora l'IP del tuo Mac cambierà automaticamente.

Nota: funziona anche su El Capitan!


1

Presentazione di Location Changer

Ecco uno script molto promettente per cambiare i percorsi di rete in base al SSID WiFi:

È stato creato da Anton Eprev . Puoi visualizzare il codice e la documentazione più dettagliata su GitHub:

Installazione

Si installa dalla riga di comando:

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

Ti verrà richiesta una password di root da installare locationchangernella /usr/local/bindirectory.

Questo è tutto!

Successivamente, se esiste un percorso di rete il cui nome è identico al nome (SSID) della rete WiFi corrente , passerà automaticamente al percorso di rete. Altrimenti, passerà alla posizione automatica . (A proposito, se non esiste una posizione chiamata automatica , si lamenta nei registri ed esce.)

Script specifico della posizione

Se si desidera eseguire uno script ogni volta che ci si connette a una specifica rete WiFi, inserire tali script ~/.locationse denominarli come reti WiFi, ad esempio ~/.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'

E potresti voler creare ~/.locations/Automaticche ripristinerà quelle modifiche in altre posizioni:

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

Assicurati di lanciare bit di esecuzione su script ( chmod +x).

Alias ​​di posizione

È possibile condividere un percorso di rete tra più reti WiFi. Ad esempio, se si dispone di un router wireless che trasmette contemporaneamente su bande da 2,4 e 5 GHz, è possibile creare un file di configurazione ~/.locations/locations.confe inserire semplici coppie chiave-valore all'interno:

Home_WiFi_5GHz=Home_WiFi

Qui le chiavi sono nomi di rete WiFi e i valori sono posizioni di rete corrispondenti . Unisciti a loro con segni uguali nudi ( =, senza spazi). Nell'esempio sopra, se la rete WiFi Home_WiFi_5GHz è connessa, passerà alla posizione di rete Home_WiFi .

Si noti che gli alias di ubicazione hanno la priorità sulla regola con lo stesso nome. Nell'esempio sopra, solo lo script ~/.locations/Home_WiFiverrà eseguito quando ci si connette alla rete WiFi Home_WiFi_5GHz .

Con gli alias di posizione, non è nemmeno necessario creare percorsi di rete aggiuntivi per i nomi corrispondenti delle reti WiFi.

Risoluzione dei problemi

È possibile visualizzare registri estesi con il seguente comando:

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

Uscita campione:

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

disinstallazione

Per prima cosa, scarica l'agente di avvio:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Quindi, rimuovere il file binario, plist e registro:

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

Puoi anche rimuovere i file di configurazione e gli script specifici della posizione all'interno di ~/.locations:

rm -rf ~/.locations
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.