Como configurar o wpa_supplicant com o SSID padrão do iPhone?

9

Os iPhones mais novos transmitirão um SSID no modo de hotspot, como:

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

Eu observei esse SSID na GUI.

Quando eu pego o SSID através da linha de comando:

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

No iPhone, ele aparece como:

My Name's iPhone

Se, em wpa_supplicant.conf, eu inserir:

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

O Raspberry Pi não se conecta ao ponto de acesso do iPhone.

No entanto, se, em wpa_supplicant.conf, eu inserir:

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

Eu recebo um erro na linha 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

Via GUI, recebo o erro "Argumento inválido".

Se wpa_supplicant.confeu entrar:

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

O raspbian não se conectará a ele e se conectará a uma rede de prioridade mais baixa (suponha que eu tenha as prioridades definidas corretamente e que testei).

ericmjl
fonte
Por que você simplesmente não coloca SSIDo iPhone? Não quero que todos vejam o "Joe Bloggs iPhone" de qualquer maneira e definam um sentido SSID.
Milliways
Isso requer a alteração do nome do iPhone do meu colega, o que eu preferiria não fazer. O objetivo é acessar a Internet em um site de campo em que estamos coletando dados com o Pis de framboesa, para que ele possa definir o horário corretamente.
precisa saber é
@ Milliways: de maneira alguma eu discordo de sua sugestão como uma solução potencial; se esse fosse meu próprio dispositivo, eu faria totalmente o que você sugeriu :).
ericmjl
Como você determinou o SSID? O '\' é um caractere de escape normal do NIX. Eu acho que este derivado de Unicode (talvez U + 2019)
Milliways
@ Milliways: atualizei meu post com detalhes de como eu peguei os SSIDs. Na GUI, eu recebo os com barras triplas. Do terminal, recebo a versão com \xE52\x80\x99.
precisa saber é

Respostas:

2

O prompt do iPhone inclui o caractere Unicode U + 2019 "aspas simples à direita". Isso é válido (se for muito inconveniente).

É fácil incluir caracteres Unicode em seqüências de caracteres. O seguinte ecoaria isso no bashprompt de comando.

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

A documentação (muito superficial) de man wpa_supplicant.confnão parece especificar como o ssidparâmetro é interpretado. Você pode tentar o formulário acima $'My Name\u2019s iPhone'e ver se isso ajuda.

NOTA A string "My Name\xE52\x80\x99s iPhone"da sua pergunta não é Unicode válida (existe um caractere em excesso 5), mas PODE funcionar se você a corrigir.

Milliways
fonte
Eu estava tendo o mesmo problema, mas alterar o SSID do iphone corrigiu tudo. Obrigado Milliways
2

Eu observei como o wpa_supplicant analisa o arquivo de configuração e parece que ele extrai os bytes exatos entre ssid="o último e o último ". Unicode com escape (\ u) e caracteres não-ascii com escape (\ x) não funcionarão.

No seu caso, você teria que especificar seu SSID assim:

    ssid="My Name’s iPhone"

O que ficaria assim em um 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

Se você estiver usando a saída de iw(que escapa caracteres não-ascii), poderá usar o Python para interpretar e gravar os bytes exatos em um arquivo:

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

Note que se você quiser se conectar a um ponto de acesso com o SSID A so called "SSID"ele vai trabalhar para inseri-lo como este: ssid="A so called "SSID"". Isso ocorre porque o wpa_supplicant procurará os bytes entre a primeira e a última cotação em uma linha.

Uma limitação que encontrei é que o wpa_supplicant.conf não aceita caracteres de nova linha (0x0A) no SSID, mesmo que tecnicamente seja possível.

KyotoFox
fonte
Eu confirmo que isso funciona. No entanto, escrevi o texto em string python unicode: ssid="\U0001F4A9"e depois o escrevi com file.write(ssid.encode("UTF-8")). Leia o ssidarquivo xxde copie os bytes sem espaços. A linha na minha configuração agora lê ssid=f09f92a9.
Christophe De Troyer
2

Você pode pegar o ssid, neste caso "iPhone do meu nome" (sem as aspas), e converter em hexadecimal usando https://www.browserling.com/tools/text-to-hex .

Tome o resultado, neste caso, 4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65 e remova os espaços.

Ou na festança

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

Atualize o /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
}

Então saia do editor e no terminal:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Se você não tiver erros, tente conectar-se. Deveria trabalhar. Apenas verifique se o valor hexadecimal do ssid NÃO está entre aspas e não contém espaços.

Felicidades!

Tiffany Antopolski
fonte
1

Você precisa renomear o iPhone para remover qualquer espaço ... isso pode ser feito em Configurações> Geral> Sobre.

Depois de escolher um nome sem espaços, você poderá se conectar a um hot spot, sem problemas.

iAN_MiLES
fonte