¿Mac OS X cambia la configuración de IP automáticamente por ubicación (por red Wifi)?

10

¿Se puede configurar Mac OS X para configurar automáticamente su interfaz de aeropuerto con una dirección IP estática cuando se conecta a una red Wifi con un nombre determinado, y en todas las demás redes Wifi utiliza DHCP?

Actualmente estoy usando la función "Ubicaciones" de la sección "Red" en Preferencias del Sistema para cambiar manualmente entre dos configuraciones de dirección IP. Tengo una configuración de "mi IP estática" y una configuración predeterminada de "DHCP". Sin embargo, esto requiere ingresar a las Preferencias del Sistema para cambiar el menú desplegable Ubicación cada vez que cambie de ubicación. ¿Se puede automatizar esto?

Preferiblemente, esto se haría sin software de terceros.

Markus Hallmann
fuente

Respuestas:

8

Esto no es algo que se pueda hacer simplemente a través del sistema operativo.

Las ubicaciones mencionadas anteriormente son una opción, junto con la ubicación gratuita del aeropuerto o MarcoPolo o la ubicación de red paga. También hay un AppleScript llamado WiFiScriptor que podría ayudar.

¡Sin embargo! no es necesario que vaya a Preferencias del sistema -> Red -> [Menú desplegable de ubicación]. Puede ir a través del menú Apple -> Ubicación (aproximadamente 6 opciones hacia abajo) -> [seleccione la ubicación que desee]

-si

supreme_b_ing
fuente
1
Gracias por el consejo sobre cambiar ubicaciones desde el Menú Apple. Aunque sigue siendo manual, se siente al menos un poco mejor que entrar en Preferencias del sistema con varios pasos.
Markus Hallmann
También gracias por confirmar que no es (actualmente) posible hacerlo sin software de terceros.
Markus Hallmann
el enlace de Ubicación del aeropuerto parece apuntar a un sitio web de spam ahora
Nat
9

Es posible prescindir de un tercero, consulte https://github.com/rimar/wifi-location-changer

Yuval Rimar
fuente
2
Solo me gustaría agregar que para que esto funcione, el nombre de su ubicación debe ser el mismo que el SSID de la red wifi. La lógica del script es que comprueba una ubicación con un nombre similar al SSID y cambia a eso. Si no hay una ubicación con ese nombre, el valor predeterminado es automático / automático.
Rystraum
Además, tuve que cerrar sesión y volver a iniciarla antes de que comenzara a funcionar en Yosemite.
djule5
1

Una solución de terceros no gratuita que probablemente funcione para usted son las ubicaciones .

Como sugiere esta respuesta a una pregunta similar, pero no idéntica, sobre stackoverflow, puede crear un script que se ejecute a intervalos regulares. launchdevitará que se ejecute más de una vez.

Psuedocode:

  • obtener el valor guardado_wifi de un archivo
  • establecer current_wifi a la salida de networksetup -getairportnetwork AirPort
  • si guardar_wifi == current_wifi, salga
  • de lo contrario, ejecute networksetup -switchtolocation {location}donde {ubicación} es el nombre de la ubicación a la que desea cambiar según la red wifi encontrada.

Puede haber una situación de huevo y gallina aquí con la conexión a wifi local que no proporciona una dirección DHCP mientras está configurado para esperar una dirección de DHCP.

-

Actualización: se encontró una posible pregunta duplicada que sugiere una solución de código abierto: MarcoPolo

Doug Harris
fuente
1

Dado que la respuesta dada es manual, aquí hay un script simple que lo cambia automáticamente:

Cree varias ubicaciones en Preferencias del sistema> Red para reflejar cada una de sus redes WiFi.

Script: ( /usr/bin/autolocation.sh) Coloque esto en la ubicación que prefiera y cambie los valores SSID en el script de acuerdo con su escenario.

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

Este script cambiará la ubicación (configuración) de la red según el SSID de la red inalámbrica. Ahora, esto debe ejecutarse siempre que haya un cambio en la configuración de la red. Crearemos un agente de launchd para hacer lo mismo.

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>

Creé este archivo en ~/Library/LaunchAgents(dentro de mi directorio de inicio) ya que soy el único usuario que usa esta máquina. Si quieres que sea global, ponlo /Library/LaunchAgents.

Este archivo debe ser propiedad rooty tener 600permisos:

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

Una vez que cierre sesión / inicie sesión o reinicie el sistema, el agente de inicio comenzará a funcionar dependiendo de dónde haya colocado el archivo (su directorio de inicio o global). Pero si no desea hacer eso y quiere que se cargue ahora, ejecute lo siguiente en la línea de comando. Tienes que hacerlo solo una vez.

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

Eso es. Ahora la IP de tu Mac cambiará automáticamente.

Nota: ¡Funciona también en El Capitán!

Vij Vijay
fuente
1

Presentación del cambiador de ubicación

Aquí hay un script muy prometedor para cambiar las ubicaciones de red basadas en WiFi SSID:

Es creado por Anton Eprev . Puede ver el código y la documentación más detallada en GitHub:

Instalación

Se instala a través de la línea de comando:

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

Le pedirá una contraseña de root para instalar locationchangeren el /usr/local/bindirectorio.

¡Eso es!

Después de eso, si hay una ubicación de red cuyo nombre es idéntico al nombre (SSID) de la red WiFi actual , cambiará automáticamente a la ubicación de red. De lo contrario, cambiará a la ubicación automática . (Por cierto, si no hay una ubicación llamada Automática , se queja en registros y salidas).

Script específico de ubicación

Si desea ejecutar una secuencia de comandos cada vez que se conecta a una red WiFi específica, ingrese esas secuencias de comandos ~/.locationsy asígneles un nombre después de las redes WiFi, por ejemplo ~/.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'

Y es posible que desee crear ~/.locations/Automaticque restablecerá esos cambios en otras ubicaciones:

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

Asegúrese de emitir bits de ejecución en scripts ( chmod +x).

Alias ​​de ubicación

Puede compartir una ubicación de red entre múltiples redes WiFi. Por ejemplo, si tiene un enrutador inalámbrico que transmite en bandas de 2.4 y 5GHz al mismo tiempo, puede crear un archivo de configuración ~/.locations/locations.confy poner pares simples de clave-valor dentro:

Home_WiFi_5GHz=Home_WiFi

Aquí las claves son nombres de redes WiFi y los valores son ubicaciones de red correspondientes . Únase a ellos con signos iguales iguales ( =sin espacios). En el ejemplo anterior, si la red WiFi Home_WiFi_5GHz está conectada, cambiará a la ubicación de red Home_WiFi .

Observe que los alias de ubicación tienen prioridad sobre la regla del mismo nombre. En el ejemplo anterior, solo el script ~/.locations/Home_WiFise ejecutará cuando se conecte a la red WiFi Home_WiFi_5GHz .

Con los alias de ubicación, ni siquiera necesita crear ubicaciones de red adicionales para nombres coincidentes de redes WiFi.

Solución de problemas

Puede ver registros extensos con el siguiente comando:

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

Salida de muestra:

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

Desinstalación

Primero, descargue el agente de lanzamiento:

launchctl unload ~/Library/LaunchAgents/LocationChanger.plist

Luego, elimine el archivo binario, plist y log:

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

También puede eliminar archivos de configuración y scripts específicos de ubicación dentro de ~/.locations:

rm -rf ~/.locations
Rockallita
fuente