Bagaimana cara mengkonfigurasi wpa_supplicant dengan iPhone SSID default?

9

IPhone yang lebih baru akan menyiarkan SSID dalam mode hotspot seperti itu:

My Name\342\\\200\\\231\\s iPhone

Saya mengamati SSID ini di GUI.

Ketika saya mengambil SSID melalui baris perintah:

$ sudo iwlist wlan0 scan | grep ESSID
> My Name\xE52\x80\x99s iPhone

Di iPhone itu muncul sebagai:

My Name's iPhone

Jika, di wpa_supplicant.conf, saya masukkan:

network={
    ssid="My Name's iPhone"
    psk="my_passcode"
}

Raspberry Pi tidak akan terhubung ke hotspot iPhone.

Namun, jika, dalam wpa_supplicant.conf, saya masukkan:

network={
    ssid="My Name\342\\\200\\\231\s iPhone"
    psk="my_passcode"
}

Saya mendapatkan kesalahan di baris perintah.

$ sudo ifdown wlan0
$ sudo ifup wlan0
> wpa_supplicant: /sbin/wpa_supplicant daemon failed to start
> run-parts: /etc/network/if-pre-up/wpasupplicant exited with return code 1
> Failed to bring up wlan0

Melalui GUI, saya mendapatkan kesalahan "Argumen tidak valid".

Jika, di wpa_supplicant.confsaya masukkan:

network={
    ssid="My Name\xE52\x80\x99s iPhone"
    psk="my_passcode"
}

Maka raspbian tidak akan terhubung ke sana, dan akan terhubung ke jaringan dengan prioritas lebih rendah (anggap saya memiliki prioritas yang ditetapkan dengan benar, yang telah saya uji).

ericmjl
sumber
Mengapa Anda tidak mengaturnya saja SSIDdi iPhone? Saya tidak ingin semua orang melihat "Joe Bloggs iPhone" dan mengatur yang masuk akal SSID.
Milliways
Itu membutuhkan pengubahan nama iPhone rekan saya, yang saya lebih suka tidak melakukannya. Tujuannya adalah untuk mendapatkan internet di situs lapangan tempat kami mengumpulkan data dengan raspberry Pis, sehingga dapat mengatur waktu dengan benar.
ericmjl
@ Miliways: tidak berarti saya tidak setuju dengan saran Anda sebagai solusi potensial; jika ini adalah perangkat saya sendiri, saya benar-benar akan melakukan apa yang Anda sarankan :).
ericmjl
Bagaimana Anda menentukannya SSID? '\' Adalah karakter pelarian NIX yang normal. Saya kira ini berasal dari Unicode (mungkin U + 2019)
Milliways
@Milliways: Saya memperbarui posting saya dengan detail tentang bagaimana saya meraih SSID. Dari GUI, saya mendapatkan yang dengan garis miring tiga. Dari terminal, saya mendapatkan versinya \xE52\x80\x99.
ericmjl

Jawaban:

2

Prompt iPhone menyertakan karakter Unicode U + 2019 "tanda kutip kanan tunggal". Ini valid (jika sangat merepotkan).

Cukup mudah untuk memasukkan karakter Unicode dalam string. Berikut ini akan mengulangi ini pada bashcommand prompt.

echo $'My Name\u2019s iPhone'
echo $'My Name\xE2\x80\x99s iPhone'

Dokumentasi (sangat samar) man wpa_supplicant.conftampaknya tidak menentukan bagaimana ssidparameter ditafsirkan. Anda dapat mencoba formulir di atas $'My Name\u2019s iPhone'dan melihat apakah itu membantu.

CATATAN String "My Name\xE52\x80\x99s iPhone"dalam pertanyaan Anda bukan Unicode yang valid (ada karakter berlebih 5) tetapi MUNGKIN ini berfungsi jika Anda memperbaikinya.

Milliways
sumber
Saya mengalami masalah yang sama, tetapi mengubah SSID iphone memperbaiki segalanya. Terima kasih Milliways
2

Saya telah melihat bagaimana wpa_supplicant mem-parsing file konfigurasi, dan sepertinya mengekstrak byte yang tepat antara ssid="dan yang terakhir ". Unicode lolos (\ u) dan lolos karakter non-ascii (\ x) tidak akan berfungsi.

Dalam kasus Anda, Anda harus menentukan SSID Anda seperti ini:

    ssid="My Name’s iPhone"

Yang akan terlihat seperti ini di hex editor:

09 73 73 69 64 3D 22 4D 79 20 4E 61 6D 65 E2 80 99 73 20 69 50 68 6F 6E 65 22

Jika Anda menggunakan keluaran dari iw(yang lolos dari karakter non-ascii), Anda dapat menggunakan Python untuk menafsirkan dan menulis byte yang tepat ke file:

$ python
>>> ssid = 'My Name\xE5\x80\x99s iPhone'
>>> file = open('ssid', 'w')
>>> file.write(ssid)
>>> file.close()

Catatan bahwa jika Anda ingin terhubung ke jalur akses dengan SSID A so called "SSID"itu akan bekerja untuk memasukkannya seperti ini: ssid="A so called "SSID"". Ini karena wpa_supplicant akan mencari byte antara kutipan pertama dan terakhir pada sebuah baris.

Satu batasan yang saya temukan adalah bahwa wpa_supplicant.conf tidak akan menerima karakter baris baru (0x0A) dalam SSID, meskipun secara teknis dimungkinkan.

KyotoFox
sumber
Saya mengkonfirmasi ini berfungsi. Saya menulis teks dalam string python unicode: ssid="\U0001F4A9"dan kemudian saya menulisnya dengan file.write(ssid.encode("UTF-8")). Baca ssidfile dengan xxddan menyalin byte tanpa spasi. Baris di konfigurasi saya sekarang terbaca ssid=f09f92a9.
Christophe De Troyer
2

Anda dapat mengambil ssid, dalam hal ini "My Name's iPhone" (tanpa tanda kutip), dan mengonversi menjadi hex menggunakan https://www.browserling.com/tools/text-to-hex .

Ambil hasilnya, dalam hal ini 4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65 dan hapus spasi.

Atau dalam bash

    $ echo -n $'My Name\xE2\x80\x99s iPhone' | od -t x1 -A n -w100000 | tr -d ' '
    4d79204e616d65e2809973206950686f6e65

Perbarui /etc/wpa_supplicant/wpa_supplicant.conf:

network = {
    # Hex encoded 'My Name\xE2\x80\x99s iPhone', NO quotes in ssid=...
    ssid=4d79204e616d65e2809973206950686f6e65
    psk="your passphrase"
    key_mgmt=WPA-PSK
}

Kemudian keluar dari editor, dan di terminal:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Jika Anda tidak memiliki kesalahan, cobalah untuk terhubung. Harus bekerja Pastikan nilai hex ssid Anda TIDAK dalam kutipan, dan tidak mengandung spasi.

Bersulang!

Tiffany Antopolski
sumber
1

Anda harus mengganti nama iPhone Anda untuk menghapus spasi ... ini dapat dilakukan di Pengaturan> Umum> Tentang.

Setelah Anda memilih nama tanpa spasi, Anda akan dapat terhubung ke hot spot bukan masalah.

iAN_MiLES
sumber