¿Cómo hacer que una Mac se vuelva a conectar automáticamente a una red wifi?

11

Tengo un Mac Mini Server que se desconecta cada pocos días de la red wifi. Puede haber otros parámetros que causen la desconexión inicial (como el enrutador inalámbrico que se reinicia) pero la Mac no se vuelve a conectar automáticamente.

Es un problema importante ya que es una máquina de servidor que de repente no está disponible hasta que alguien va físicamente a la máquina y usa el menú wifi para volver a conectarse manualmente a la red. Debo mencionar que aunque la red wifi es WPA2, la reconexión manual no implica volver a ingresar la contraseña, por lo que no hay una razón obvia por la que no se reconecte automáticamente.

¿Cómo puedo hacer que la Mac intente periódicamente conectarse a una red wifi específica?

GJ
fuente
¿La red en cuestión se define como Preferida? ¿Ha verificado en Preferencias del sistema> Red que "Recordar cualquier red a la que se haya unido esta computadora" está marcada y "Desconectar de las redes inalámbricas al cerrar sesión" no está marcada? También puede intentar eliminar y volver a crear la conexión de red.
harrymc
¿Dónde está exactamente la opción "Desconectarse de las redes inalámbricas al cerrar sesión"? Está corriendo Lion.
GJ.
Aparentemente en la configuración avanzada.
harrymc
no para hacerte paranoico ni nada, pero la única forma de descifrar el cifrado WPA2 es rastrear los paquetes de autenticación (cuando una computadora se conecta) y la forma más común de hacerlo es des autenticar una de las máquinas y rastrear la red cuando se vuelve a conectar.
Nate Koppenhaver

Respuestas:

12

Aquí hay un script Applescript y shell para verificar si el aeropuerto está conectado y si no lo está.

if (do shell script "networksetup -getinfo Wi-Fi | grep -c 'IP address:'") = 1 then
    do shell script "networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>"
end if
#!/bin/bash
if [ $(networksetup -getinfo Wi-Fi | grep -c 'IP address:') = '1' ]
then networksetup -setairportnetwork en1 <networkName> <passwordToNetwork>
fi

Reemplace <networkName>con el nombre de la red y <passwordToNetwork>con su contraseña. El "en1" debe ser correcto si no ha cambiado sus dispositivos de red.

Ahora todo lo que necesita hacer es hacer un bucle o llamarlo para verificar la conexión.

Sin embargo, el aeropuerto debería reconectarse automáticamente si se pierde la conexión. Tal vez intente restablecer todas las preferencias de red y ver si eso funciona.

Cómo restablecer completamente sus preferencias de red: apague el aeropuerto. Cerrar las preferencias del sistema. Vaya a: /Library/Preferences/SystemConfiguration/ Haga una copia, luego elimine los siguientes archivos:

com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist
Kassym Dorsel
fuente
Gracias. ¿Por qué usar un AppleScript? parece prestarse más a un script de shell, tal vez uno que se ejecuta cada minuto más o menos usando launchd.
GJ.
Además, ¿cómo "restablecer todas las preferencias de red"?
GJ.
Esto podría hacerse con un script de shell. Aunque soy mejor en Applescript, así que lo escribí en Applescript. Veré si puedo escribirlo en un script de shell. También he actualizado la publicación sobre cómo restablecer las preferencias de red.
Kassym Dorsel
Se mejoró el script y se agregó un script de shell.
Kassym Dorsel
Arreglé el error de script de shell más atroz, pero probablemente debería ser refactorizado un poco más. En mi Mac obtengo dos hits grepcuando está activo y solo uno cuando está inactivo, pero probablemente sería mejor buscar algo más; contar el número de algo es más o menos un antipatrón.
tripleee
5

Me gustaría comentar la respuesta de Kassym Dorsel , pero no tengo suficientes puntos para hacerlo.

Tuve el mismo problema con mi servidor Mac:

Wi-Fi se conecta a VPN y Ethernet a LAN, por lo que si se pierde la conexión Wi-Fi, OS X no se vuelve a conectar automáticamente.

Considerando la respuesta de Kassym Dorsel:

  • No me sentía cómodo teniendo mi contraseña de Wi-Fi almacenada en claro (es cierto que es un riesgo extremadamente bajo, pero aún así).

  • Quería que habilitara el Wi-Fi si se hubiera deshabilitado.

  • Quería que manejara la condición en la que se asignó una dirección IP estática, el Wi-Fi estaba habilitado, pero todavía no estaba conectado o conectado a la red Wi-Fi (SSID) incorrecta.

Así que modifiqué su script para abordar estas preocupaciones (reemplace <networkName>con su SSID de red preferido):

#!/bin/bash

# turn on Wi-Fi if it's turned 'Off'
if networksetup -getairportpower en1 | grep -q 'Off'
    then networksetup -setairportpower en1 on
fi

# cycle Wi-Fi power if missing 'IP address'
if [ $(networksetup -getinfo Wi-Fi | grep -c 'IP address:') = '1' ]
then
    networksetup -setairportpower en1 off
    networksetup -setairportpower en1 on
fi

# initiate connection if not connected to the correct network
if networksetup -getairportnetwork en1 | grep -q '<networkName>'
    then networksetup -setairportnetwork en1 '<networkName>'
fi
Vic demente
fuente
Similar a la respuesta aceptada, arreglé los problemas de programación de shell más problemáticos. Esto es casi elegante ahora.
tripleee
2

Puede intentar jugar con la airportutilidad (en las versiones más recientes de OS X está oculta /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airporto en una ruta similar).

Específicamente, las preferencias JoinModey JoinModeFallbackpodrían ser útiles. En mi máquina, JoinModeFallbackestá configurado DoNothingde forma predeterminada. Cambiarlo a KeepLookingparece un comienzo prometedor.

Corre airportsin argumentos para ver su ayuda.

mpitt
fuente
Esto fue interesante y prometedor, pero al final no cambió nada para mí. Cambié las preferencias (tenía "desconocido" y "nada" para el respaldo) pero el WiFi aún no se reconecta.
tripleee
0

Aquí hay una refactorización simple que funciona para mí.

#!/bin/bash
networksetup -getinfo Wi-Fi | grep -q Subnet: ||
networksetup -setairportnetwork en1 "$ssid" "$password"

Obviamente, reemplace $ssidcon el SSID de red real y $passwordcon la contraseña para esta red.

tripleee
fuente