Bagaimana cara mendapatkan Mac untuk terhubung kembali secara otomatis ke jaringan wifi?

11

Saya memiliki Mac Mini Server yang memutuskan koneksi setiap beberapa hari dari jaringan wifi. Mungkin ada parameter lain yang menyebabkan pemutusan awal (seperti router nirkabel sedang reboot) tetapi Mac tidak secara otomatis menyambung kembali.

Ini masalah besar karena ini adalah mesin server yang tiba-tiba menjadi tidak tersedia sampai seseorang masuk ke mesin secara fisik dan menggunakan menu wifi untuk menghubungkan kembali secara manual ke jaringan. Saya harus menyebutkan bahwa meskipun jaringan wifi adalah WPA2, menghubungkan kembali secara manual tidak melibatkan memasukkan kembali kata sandi sehingga tidak ada alasan yang jelas mengapa tidak terhubung kembali secara otomatis.

Bagaimana saya bisa membuat Mac mencoba secara berkala dan menyambung kembali ke jaringan wifi yang ditentukan?

GJ.
sumber
Apakah jaringan yang dimaksud didefinisikan sebagai Pilihan? Sudahkah Anda memeriksa System Preferences> Network yang "Ingat jaringan mana pun yang komputer ini gabungkan" dicentang dan "Putuskan sambungan dari jaringan nirkabel saat keluar" tidak dicentang? Anda juga dapat mencoba menghapus dan membuat ulang koneksi jaringan.
harrymc
di mana tepatnya opsi "Putuskan sambungan dari jaringan nirkabel saat keluar"? Itu berlari Lion.
GJ.
Rupanya dalam pengaturan lanjutan.
harrymc
bukan untuk membuat Anda paranoid atau apa pun, tetapi satu-satunya cara untuk memecahkan enkripsi WPA2 adalah dengan mengendus paket otentikasi (ketika komputer terhubung) dan cara paling umum untuk melakukannya adalah dengan menonaktifkan otentikasi salah satu mesin dan mengendus jaringan saat itu menghubungkan kembali.
Nate Koppenhaver

Jawaban:

12

Berikut adalah Applescript dan skrip shell untuk memeriksa apakah Bandara terhubung dan jika tidak menghubungkannya.

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

Ganti <networkName>dengan nama jaringan dan <passwordToNetwork>dengan kata sandinya. "En1" seharusnya benar jika Anda belum mengubah perangkat Jaringan Anda.

Sekarang yang perlu Anda lakukan adalah loop ini atau panggil untuk memeriksa koneksi.

Namun demikian bandara harus secara otomatis menyambung kembali jika koneksi terputus. Mungkin coba mengatur ulang semua preferensi jaringan dan lihat apakah itu berhasil.

Cara mengatur ulang Preferensi Jaringan Anda: Matikan Bandara. Tutup Preferensi Sistem. Arahkan ke: /Library/Preferences/SystemConfiguration/ Buat salinan, lalu hapus file-file berikut:

com.apple.airport.preferences.plist
com.apple.network.*
com.apple.smb.server.plist
NetworkInterfaces.plist
Kassym Dorsel
sumber
Terima kasih. mengapa menggunakan applescript? tampaknya meminjamkan dirinya lebih ke skrip shell mungkin yang berjalan setiap menit atau lebih menggunakan launchd.
GJ.
juga, bagaimana Anda "mengatur ulang semua preferensi jaringan"?
GJ.
Ini bisa dilakukan dengan skrip shell. Meskipun saya lebih baik di Applescript, jadi saya menulisnya di Applescript. Saya akan melihat apakah saya bisa menulisnya dalam skrip shell. Saya juga memperbarui posting tentang mengatur ulang preferensi jaringan.
Kassym Dorsel
Memperbaiki skrip dan menambahkan skrip shell.
Kassym Dorsel
Saya memperbaiki kesalahan skrip shell yang paling mengerikan tetapi mungkin harus di refactored lagi. Di Mac saya, saya mendapatkan dua hit dari grepsaat itu naik dan hanya satu hit ketika itu turun, tetapi mungkin akan lebih baik untuk memeriksa sesuatu yang lain; menghitung jumlah sesuatu adalah antipattern.
tripleee
5

Saya ingin mengomentari jawaban Kassym Dorsel , tetapi saya tidak punya cukup poin untuk melakukannya.

Saya memiliki masalah yang sama dengan server Mac saya:

Wi-Fi terhubung ke VPN dan Ethernet ke LAN, jadi jika koneksi Wi-Fi terputus, OS X tidak secara otomatis terhubung kembali.

Mempertimbangkan jawaban Kassym Dorsel:

  • Saya tidak nyaman menyimpan kata sandi Wi-Fi saya di tempat yang jelas (memang itu risiko yang sangat rendah, tapi tetap saja).

  • Saya ingin mengaktifkan Wi-Fi jika telah dinonaktifkan.

  • Saya ingin menangani kondisi di mana alamat IP statis diberikan, Wi-Fi diaktifkan, tetapi masih tidak terhubung atau terhubung ke jaringan Wi-Fi (SSID) yang salah.

Jadi saya memodifikasi skripnya untuk mengatasi masalah ini (ganti <networkName>dengan SSID jaringan pilihan Anda):

#!/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
sumber
Mirip dengan jawaban yang diterima, saya memperbaiki masalah pemrograman shell yang paling bermasalah. Ini hampir elegan sekarang.
tripleee
2

Anda mungkin mencoba bermain dengan airportutilitas (dalam versi OS X yang lebih baru tersembunyi di /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airportjalur yang serupa).

Secara khusus, JoinModedan JoinModeFallbackpreferensi dapat bermanfaat. Di mesin saya, JoinModeFallbackdiatur ke DoNothingdefault. Mengubahnya KeepLookingmenjadi awal yang menjanjikan.

Jalankan airporttanpa argumen untuk melihat bantuannya.

mpitt
sumber
Ini menarik dan menjanjikan, tetapi pada akhirnya tidak mengubah apa pun untuk saya. Saya mengubah preferensi (saya punya "tidak dikenal" dan "tidak ada" untuk mundur) tetapi WiFi masih tidak tersambung kembali.
tripleee
0

Inilah refactoring sederhana yang berfungsi untuk saya.

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

Jelas, ganti $ssiddengan SSID jaringan yang sebenarnya dan $passworddengan kata sandi untuk jaringan ini.

tripleee
sumber