Come configuro wpa_supplicant con l'SSID iPhone predefinito?


9

Gli iPhone più recenti trasmettono un SSID in modalità hotspot in quanto tale:

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

Ho osservato questo SSID nella GUI.

Quando afferro il SSID dalla riga di comando:

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

Nell'iPhone si presenta come:

My Name's iPhone

Se, in wpa_supplicant.conf, inserisco:

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

Raspberry Pi non si collegherà all'hotspot di iPhone.

Tuttavia, se, in wpa_supplicant.conf, inserisco:

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

Viene visualizzato un errore nella riga di comando.

$ 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

Tramite la GUI, viene visualizzato l'errore "Argomento non valido".

Se, entro, wpa_supplicant.confinserisco:

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

Quindi raspbian non si connetterà ad esso e si connetterà a una rete con priorità inferiore (supponiamo che le priorità siano impostate correttamente, che ho testato).


Perché non hai appena impostato SSIDl'iPhone? Non voglio che tutti vedano "Joe Bloggs iPhone" in ogni caso e creino un senso SSID.
Milliways,

Ciò richiede la modifica del nome iPhone del mio collega, cosa che preferirei non fare. Lo scopo è quello di ottenere Internet in un sito sul campo in cui stiamo raccogliendo dati con il Raspberry Pis, in modo che possa impostare l'ora correttamente.
ericmjl,

@Milliways: non intendo assolutamente dissentire dal tuo suggerimento come potenziale soluzione; se questo fosse il mio dispositivo, farei totalmente quello che mi hai suggerito :).
ericmjl,

Come hai determinato il SSID? '\' È un normale carattere di escape NIX. Immagino che questo derivi da Unicode (forse U + 2019)
Milliways

@Milliways: ho aggiornato il mio post con i dettagli su come ho afferrato gli SSID. Dalla GUI, ottengo quelli con tre barre. Dal terminale, ottengo la versione con \xE52\x80\x99.
ericmjl,

Risposte:


2

Il prompt di iPhone include il carattere Unicode U + 2019 "virgolette singole a destra". Questo è valido (se molto scomodo).

È abbastanza facile includere caratteri Unicode nelle stringhe. Quanto segue farebbe eco questo al bashprompt dei comandi.

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

La documentazione (molto approssimativa) di man wpa_supplicant.confnon sembra specificare come il ssidparametro viene interpretato. Puoi provare il modulo sopra $'My Name\u2019s iPhone'e vedere se questo aiuta.

NOTA La stringa "My Name\xE52\x80\x99s iPhone"nella tua domanda non è Unicode valida (c'è un carattere in eccesso 5) ma può funzionare se la correggi.


Stavo avendo lo stesso problema, ma cambiare l'SSID dell'iPhone ha risolto tutto. Grazie Milliways

2

Ho dato un'occhiata a come wpa_supplicant analizza il file di configurazione e sembra che estrae i byte esatti tra ssid="e l'ultimo ". Unicode con escape (\ u) e caratteri non ascii con escape (\ x) non funzioneranno.

Nel tuo caso, dovresti specificare il tuo SSID in questo modo:

    ssid="My Name’s iPhone"

Che sarebbe simile a questo in un editor esadecimale:

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

Se stai usando l'output da iw(che sfugge ai caratteri non ascii), puoi usare Python per interpretare e scrivere i byte esatti in un file:

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

Si noti che se si desidera connettersi a un access point con l'SSID A so called "SSID"che funzionerà per entrare in questo modo: ssid="A so called "SSID"". Questo perché wpa_supplicant cercherà i byte tra la prima e l'ultima citazione su una riga.

Una limitazione che ho riscontrato è che wpa_supplicant.conf non accetterà caratteri newline (0x0A) nel SSID, anche se tecnicamente è possibile.


Confermo che funziona. Ho scritto il testo in stringa unicode in pitone, però: ssid="\U0001F4A9"e poi l'ho scritto con file.write(ssid.encode("UTF-8")). Legge il ssidfile con xxde copia i byte senza spazi. La riga nella mia configurazione ora recita ssid=f09f92a9.
Christophe De Troyer,

2

Puoi prendere lo ssid, in questo caso "My Name's iPhone" (senza virgolette), e convertirlo in esadecimale usando https://www.browserling.com/tools/text-to-hex .

Prendi il risultato, in questo caso 4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65 e rimuovi gli spazi.

O in bash

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

Aggiorna /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
}

Quindi uscire dall'editor e nel terminale:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Se non si verificano errori, provare a connettersi. Dovrebbe funzionare. Assicurati solo che il tuo valore esadecimale ssid NON sia tra virgolette e non contenga spazi.

Saluti!


1

Devi rinominare il tuo iPhone per rimuovere eventuali spazi ... questo può essere fatto in Impostazioni> Generali> Informazioni.

Dopo aver scelto un nome senza spazi, sarai in grado di connetterti a un hot spot e non a problemi.

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.