Come ottenere un Mac per riconnettersi automaticamente a una rete wifi?


11

Ho un Mac Mini Server che si disconnette ogni pochi giorni dalla rete wifi. Potrebbero esserci altri parametri che causano la disconnessione iniziale (come il riavvio del router wireless) ma il Mac non si riconnette automaticamente.

È un grosso problema poiché è una macchina server che diventa improvvisamente non disponibile fino a quando qualcuno non va fisicamente alla macchina e utilizza il menu Wi-Fi per riconnettersi manualmente alla rete. Devo dire che, sebbene la rete wifi sia WPA2, la riconnessione manuale non comporta il reinserimento della password, quindi non c'è motivo ovvio per cui non si riconnetta automaticamente.

Come posso convincere il Mac a provare periodicamente a riconnettersi a una specifica rete Wi-Fi?


La rete in questione è definita come preferita? Hai controllato in Preferenze di Sistema> Rete che è selezionata l'opzione "Ricorda qualsiasi rete a cui questo computer ha aderito" e "Disconnetti da reti wireless quando esci" è deselezionato? Puoi anche provare a eliminare e ricreare la connessione di rete.
harrymc,

dove si trova esattamente l'opzione "Disconnetti dalle reti wireless al logout"? Esegue Lion.
GJ.

Apparentemente in Impostazioni avanzate.
harrymc,

non per renderti paranoico o altro, ma l'unico modo per decifrare la crittografia WPA2 è annusare i pacchetti di autenticazione (quando un computer si connette) e il modo più comune per farlo è dis-autenticare una delle macchine e annusare la rete quando si riconnette.
Nate Koppenhaver,

Risposte:


12

Ecco uno script Apple e uno script di shell per verificare se l'aeroporto è collegato e se non per connetterlo.

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

Sostituisci <networkName>con il nome della rete e <passwordToNetwork>con la sua password. "En1" dovrebbe essere corretto se non hai cambiato i tuoi dispositivi di rete.

Ora tutto ciò che devi fare è eseguire questo ciclo o chiamarlo per verificare la connessione.

Tuttavia l'aeroporto dovrebbe riconnettersi automaticamente se la connessione viene persa. Forse prova a ripristinare tutte le preferenze di rete e vedi se funziona.

Come ripristinare completamente le preferenze di rete: disattivare Airport. Chiudi le Preferenze di Sistema. Passare a: /Library/Preferences/SystemConfiguration/ Crea una copia, quindi elimina i seguenti file:

com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist

Grazie. perché usare uno script di mele però? sembra prestarsi di più a uno script di shell, forse uno che viene eseguito ogni minuto circa usando launchd.
GJ.

inoltre, come "reimposta tutte le preferenze di rete"?
GJ.

Questo potrebbe essere fatto con uno script di shell. Anche se sto meglio su Applescript, quindi l'ho scritto in Applescript. Vedrò se riesco a scriverlo in uno script di shell. Ho anche aggiornato il post sul ripristino delle preferenze di rete.
Kassym Dorsel,

Migliorato lo script e aggiunto uno script di shell.
Kassym Dorsel,

Ho corretto l'errore di script shell più eclatante, ma probabilmente dovrebbe essere riformulato un po 'di più. Sul mio Mac ricevo due hit da grepquando è attivo e solo uno quando è inattivo, ma probabilmente sarebbe meglio controllare qualcos'altro; contare il numero di qualcosa è praticamente un antipasto.
Tripleee

5

Vorrei commentare la risposta di Kassym Dorsel , ma non ho abbastanza punti per farlo.

Ho avuto lo stesso problema con il mio server Mac:

Il Wi-Fi si collega a VPN e da Ethernet a LAN, quindi se si perde la connessione Wi-Fi, OS X non si riconnette automaticamente.

Considerando la risposta di Kassym Dorsel:

  • Non mi sentivo a mio agio con la mia password Wi-Fi memorizzata in chiaro (è vero che è un rischio estremamente basso, ma comunque).

  • Volevo che abilitasse il Wi-Fi se fosse stato disabilitato.

  • Volevo che gestisse la condizione in cui era stato assegnato un indirizzo IP statico, il Wi-Fi era abilitato, ma non era ancora connesso o connesso alla rete Wi-Fi (SSID) sbagliata.

Quindi ho modificato il suo script per risolvere questi problemi (sostituiscilo <networkName>con il tuo SSID di rete preferito):

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

Simile alla risposta accettata, ho risolto i problemi di programmazione della shell più problematici. Questo è quasi elegante ora.
Tripleee

2

Potresti provare a giocare con l' airportutilità (nelle versioni più recenti di OS X è nascosto /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airporto in un percorso simile).

In particolare, le preferenze JoinModee JoinModeFallbackpotrebbero essere utili. Sulla mia macchina, JoinModeFallbackè impostato di DoNothingdefault. Cambiarlo in KeepLookingsembra un inizio promettente.

Esegui airportsenza argomenti per vedere il suo aiuto.


Questo è stato interessante e promettente, ma alla fine non ha cambiato nulla per me. Ho cambiato le preferenze (avevo "sconosciuto" e "niente" per il fallback) ma il WiFi ancora non si riconnette.
triplo

0

Ecco un semplice refactoring che funziona per me.

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

Ovviamente, sostituire $ssidcon l'SSID di rete effettivo e $passwordcon la password per questa rete.

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.