Wie kann ein Mac automatisch eine Verbindung zu einem WLAN-Netzwerk herstellen?

11

Ich habe einen Mac Mini Server, der sich alle paar Tage vom WLAN-Netzwerk trennt. Möglicherweise verursachen andere Parameter die anfängliche Trennung (z. B. der Neustart des WLAN-Routers), aber der Mac stellt die Verbindung nicht automatisch wieder her.

Dies ist ein großes Problem, da es sich um einen Server handelt, der plötzlich nicht mehr verfügbar ist, bis jemand physisch zum Computer geht und das WLAN-Menü verwendet, um die Verbindung zum Netzwerk manuell wiederherzustellen. Ich sollte erwähnen, dass, obwohl das WLAN-Netzwerk WPA2 ist, das manuelle Wiederverbinden keine erneute Eingabe des Kennworts erfordert, sodass es keinen offensichtlichen Grund gibt, warum das Herstellen der Verbindung nicht automatisch erfolgt.

Wie kann ich den Mac dazu bringen, regelmäßig zu versuchen, eine Verbindung zu einem bestimmten WLAN-Netzwerk herzustellen?

GJ.
quelle
Ist das betreffende Netzwerk als bevorzugt definiert? Haben Sie in den Systemeinstellungen> Netzwerk überprüft, dass "An ein Netzwerk erinnern, dem dieser Computer beigetreten ist" aktiviert ist und "Beim Abmelden von drahtlosen Netzwerken trennen" deaktiviert ist? Sie können auch versuchen, die Netzwerkverbindung zu löschen und neu zu erstellen.
Harrymc
Wo genau befindet sich die Option "Beim Abmelden von drahtlosen Netzwerken trennen"? Es läuft Lion.
GJ.
Anscheinend in den erweiterten Einstellungen.
Harrymc
Nicht um Sie paranoid oder so zu machen, aber die einzige Möglichkeit, die WPA2-Verschlüsselung zu knacken, besteht darin, die Authentifizierungspakete zu schnüffeln (wenn ein Computer eine Verbindung herstellt). Die häufigste Methode besteht darin, einen der Computer zu de-authentifizieren und das Netzwerk zu schnüffeln, wenn es verbindet sich wieder.
Nate Koppenhaver

Antworten:

12

Hier ist ein Applescript und ein Shell-Skript, um zu überprüfen, ob der Flughafen verbunden ist und ob nicht.

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

Ersetzen Sie <networkName>durch den Namen des Netzwerks und <passwordToNetwork>durch sein Passwort. Das "en1" sollte korrekt sein, wenn Sie Ihre Netzwerkgeräte nicht geändert haben.

Jetzt müssen Sie dies nur noch schleifen oder aufrufen, um die Verbindung zu überprüfen.

Trotzdem sollte sich der Flughafen automatisch wieder verbinden, wenn die Verbindung unterbrochen wird. Versuchen Sie möglicherweise, alle Netzwerkeinstellungen zurückzusetzen, und prüfen Sie, ob dies funktioniert.

So setzen Sie Ihre Netzwerkeinstellungen vollständig zurück: Schalten Sie den Flughafen aus. Schließen Sie die Systemeinstellungen. Navigieren Sie zu: Erstellen /Library/Preferences/SystemConfiguration/ Sie eine Kopie und löschen Sie die folgenden Dateien:

com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist
Kassym Dorsel
quelle
Vielen Dank. Warum sollte man ein Applescript verwenden? Es scheint sich eher für ein Shell-Skript zu eignen, das möglicherweise jede Minute mit launchd ausgeführt wird.
GJ.
Wie können Sie "alle Netzwerkeinstellungen zurücksetzen"?
GJ.
Dies könnte mit einem Shell-Skript erfolgen. Obwohl ich besser in Applescript bin, habe ich es in Applescript geschrieben. Ich werde sehen, ob ich es in ein Shell-Skript schreiben kann. Ich habe auch den Beitrag zum Zurücksetzen der Netzwerkeinstellungen aktualisiert.
Kassym Dorsel
Das Skript wurde verbessert und ein Shell-Skript hinzugefügt.
Kassym Dorsel
Ich habe den ungeheuerlichsten Shell-Skriptfehler behoben, aber er sollte wahrscheinlich noch weiter überarbeitet werden. Auf meinem Mac bekomme ich zwei Treffer, grepwenn es hoch ist, und nur einen, wenn es runter ist, aber es wäre wahrscheinlich besser, nach etwas anderem zu suchen. Die Anzahl von etwas zu zählen ist so ziemlich ein Antimuster.
Tripleee
5

Ich würde gerne die Antwort von Kassym Dorsel kommentieren , aber ich habe nicht genug Punkte, um dies zu tun.

Ich hatte das gleiche Problem mit meinem Mac-Server:

Wi-Fi stellt eine Verbindung zu VPN und Ethernet zu LAN her. Wenn die Wi-Fi-Verbindung unterbrochen wird, stellt OS X die Verbindung nicht automatisch wieder her.

In Anbetracht der Antwort von Kassym Dorsel:

  • Es war mir unangenehm, mein WLAN-Passwort im Klartext zu speichern (zugegebenermaßen ist das Risiko äußerst gering, aber dennoch).

  • Ich wollte, dass Wi-Fi aktiviert wird, wenn es deaktiviert wurde.

  • Ich wollte, dass es den Zustand behandelt, in dem eine statische IP-Adresse zugewiesen wurde, Wi-Fi aktiviert war, aber entweder immer noch nicht verbunden oder mit dem falschen Wi-Fi-Netzwerk (SSID) verbunden war.

Deshalb habe ich sein Skript geändert, um diese Bedenken auszuräumen (durch <networkName>Ihre bevorzugte Netzwerk-SSID ersetzen ):

#!/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 Demented
quelle
Ähnlich wie bei der akzeptierten Antwort habe ich die problematischsten Probleme bei der Shell-Programmierung behoben. Das ist jetzt fast elegant.
Tripleee
2

Sie könnten versuchen, mit dem airportDienstprogramm zu spielen (in neueren OS X-Versionen ist es in /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airporteinem ähnlichen Pfad versteckt ).

Insbesondere könnten die Einstellungen JoinModeund JoinModeFallbacknützlich sein. Auf meinem Computer JoinModeFallbackist DoNothingstandardmäßig eingestellt. Es KeepLookingscheint ein vielversprechender Anfang zu sein.

Führen Sie airportohne Argumente aus, um die Hilfe anzuzeigen.

mpitt
quelle
Das war interessant und vielversprechend, hat aber am Ende nichts für mich geändert. Ich habe die Einstellungen geändert (ich hatte "unbekannt" und "nichts" für den Fallback), aber das WLAN wird immer noch nicht wieder verbunden.
Tripleee
0

Hier ist ein einfaches Refactoring, das für mich funktioniert.

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

Ersetzen Sie diese natürlich durch $ssiddie tatsächliche Netzwerk-SSID und $passworddas Kennwort für dieses Netzwerk.

Tripleee
quelle