¿Cómo configuro wpa_supplicant con el SSID predeterminado del iPhone?

9

Los iPhones más nuevos transmitirán un SSID en modo de punto de acceso como tal:

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

Observé este SSID en la GUI.

Cuando tomo el SSID a través de la línea de comando:

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

En el iPhone aparece como:

My Name's iPhone

Si, en wpa_supplicant.conf, ingreso:

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

La Raspberry Pi no se conectará al punto de acceso del iPhone.

Sin embargo, si, en wpa_supplicant.conf, ingreso:

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

Me sale un error en la línea de 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

A través de la GUI, aparece el error "Argumento no válido".

Si wpa_supplicant.confentro entro:

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

Entonces raspbian no se conectará a él, y se conectará a una red de menor prioridad (suponga que tengo las prioridades establecidas correctamente, que he probado).

ericmjl
fuente
¿Por qué no configuras SSIDel iPhone? No quiero que todos vean "Joe Bloggs iPhone" de todos modos y establezcan un sentido SSID.
Milliways
Eso requiere cambiar el nombre de iPhone de mi colega, lo que preferiría no hacer. El propósito es obtener internet en un sitio de campo donde estamos recolectando datos con el Raspberry Pis, para que pueda configurar la hora correctamente.
ericmjl
@Milliways: de ninguna manera me refiero a estar en desacuerdo con su sugerencia como una posible solución; si este fuera mi propio dispositivo, haría totalmente lo que me sugieres :).
ericmjl
¿Cómo determinaste el SSID? El '\' es un carácter de escape NIX normal. Supongo que esto se deriva de Unicode (quizás U + 2019)
Milliways
@Milliways: Actualicé mi publicación con detalles sobre cómo tomé los SSID. De la GUI, obtengo los que tienen barras triples. Desde el terminal, obtengo la versión con \xE52\x80\x99.
ericmjl

Respuestas:

2

El mensaje del iPhone incluye el carácter Unicode U + 2019 "comillas simples a la derecha". Esto es válido (si es muy inconveniente).

Es bastante fácil incluir caracteres Unicode en cadenas. Lo siguiente haría eco de esto en el bashsímbolo del sistema.

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

La documentación (muy incompleta) de man wpa_supplicant.confno parece especificar cómo ssidse interpreta el parámetro. Puede probar el formulario de arriba $'My Name\u2019s iPhone'y ver si eso ayuda.

NOTA La cadena "My Name\xE52\x80\x99s iPhone"en su pregunta no es válida Unicode (hay un exceso de caracteres 5) pero esto PUEDE funcionar si lo corrige.

Milliways
fuente
Estaba teniendo el mismo problema, pero cambiar el SSID del iPhone solucionó todo. Gracias Milliways
2

Eché un vistazo a cómo wpa_supplicant analiza el archivo de configuración, y parece que extrae los bytes exactos entre ssid="y el último ". Los caracteres unicode con escape (\ u) y los caracteres sin ascii con escape (\ x) no funcionarán.

En su caso, debería especificar su SSID de esta manera:

    ssid="My Name’s iPhone"

Que se vería así en un editor hexadecimal:

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

Si está utilizando la salida de iw(que escapa caracteres no ascii), puede usar Python para interpretar y escribir los bytes exactos en un archivo:

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

Tenga en cuenta que si desea conectarse a un punto de acceso con el SSID A so called "SSID"que funcionará para entrar de esta manera: ssid="A so called "SSID"". Esto se debe a que wpa_supplicant buscará los bytes entre la primera y la última cita en una línea.

Una limitación que encontré es que wpa_supplicant.conf no aceptará caracteres de nueva línea (0x0A) en el SSID, aunque técnicamente es posible.

KyotoFox
fuente
Confirmo que esto funciona. Sin embargo, escribí el texto en una cadena de python unicode: ssid="\U0001F4A9"y luego lo escribí con file.write(ssid.encode("UTF-8")). Leer el ssidarchivo con xxdy copiar los bytes sin espacios. La línea en mi configuración ahora se lee ssid=f09f92a9.
Christophe De Troyer
2

Puede tomar el ssid, en este caso "iPhone de mi nombre" (sin las comillas), y convertirlo a hexadecimal usando https://www.browserling.com/tools/text-to-hex .

Tome el resultado, en este caso 4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65 y elimine los espacios.

O en fiesta

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

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

Luego salga del editor y en la terminal:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Si no tiene errores, intente conectarse. Deberia trabajar. Solo asegúrese de que su valor hexadecimal ssid NO esté entre comillas y que no contenga espacios.

¡Salud!

Tiffany Antopolski
fuente
1

Debe cambiar el nombre de su iPhone para eliminar cualquier espacio ... esto se puede hacer en Configuración> General> Acerca de.

Una vez que haya elegido un nombre sin espacios, podrá conectarse a un punto de acceso sin problemas.

iAN_MiLES
fuente