Как настроить wpa_supplicant с SSID iPhone по умолчанию?


9

Более новые айфоны будут транслировать SSID в режиме точки доступа как таковой:

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

Я наблюдал этот SSID в GUI.

Когда я беру SSID через командную строку:

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

В iPhone это выглядит как:

My Name's iPhone

Если в wpa_supplicant.conf я введу:

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

Raspberry Pi не будет подключаться к точке доступа iPhone.

Однако, если wpa_supplicant.confя введу:

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

Я получаю сообщение об ошибке в командной строке.

$ 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

Через графический интерфейс я получаю ошибку «Неверный аргумент».

Если в wpa_supplicant.confя вхожу:

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

Тогда raspbian не будет подключаться к нему и подключится к сети с более низким приоритетом (предположим, что у меня правильно установлены приоритеты, которые я протестировал).


Почему бы вам просто не установить SSIDiPhone? Я не хочу, чтобы все видели «iPhone Джо Блоггса» в любом случае и внесли разумный вклад SSID.
Milliways

Это требует изменения имени iPhone моего коллеги, что я предпочел бы не делать. Цель состоит в том, чтобы подключить интернет к полевому сайту, где мы собираем данные с помощью малинового писа, чтобы он мог правильно установить время.
ericmjl

@Milliways: отнюдь не имею в виду не согласиться с вашим предложением в качестве потенциального решения; если бы это было мое собственное устройство, я бы полностью сделал то, что вы предложили :).
ericmjl

Как вы определили SSID? '\' - это обычный управляющий символ NIX. Я предполагаю, что это происходит от Unicode (возможно, U + 2019)
Milliways

@Milliways: я обновил свой пост с подробностями о том, как я получил SSID. Из графического интерфейса я получаю те, которые с тройной косой чертой. Из терминала я получаю версию с \xE52\x80\x99.
ericmjl

Ответы:


2

Приглашение iPhone содержит символ Unicode U + 2019 «одинарная правая кавычка». Это действительно (если очень неудобно).

Достаточно просто включить символы Unicode в строки. Следующее повторяет это в bashкомандной строке.

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

(Очень схематичная) документация man wpa_supplicant.conf, похоже, не определяет, как ssidинтерпретируется параметр. Вы можете попробовать форму выше $'My Name\u2019s iPhone'и посмотреть, поможет ли это.

ПРИМЕЧАНИЕ Строка "My Name\xE52\x80\x99s iPhone"в вашем вопросе не является допустимым Unicode (есть лишний символ 5), но это МОЖЕТ работать, если вы исправите это.


У меня была такая же проблема, но изменение SSID iphone все исправило. Спасибо Milliways

2

Я посмотрел, как wpa_supplicant анализирует файл конфигурации, и кажется, что он извлекает точные байты между ssid="последним и последним ". Экранированный Unicode (\ u) и экранированные символы не-ascii (\ x) не будут работать.

В вашем случае вы должны указать свой SSID следующим образом:

    ssid="My Name’s iPhone"

Который будет выглядеть так в шестнадцатеричном редакторе:

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

Если вы используете вывод из iw(который выходит за пределы символов, отличных от ascii), вы можете использовать Python для интерпретации и записи точных байтов в файл:

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

Обратите внимание , что если вы хотите подключиться к точке доступа с SSID A so called "SSID"он будет работать , чтобы ввести его в : ssid="A so called "SSID"". Это потому, что wpa_supplicant будет искать байты между первой и последней кавычкой в ​​строке.

Одно ограничение, которое я обнаружил, заключается в том, что wpa_supplicant.conf не будет принимать символы новой строки (0x0A) в SSID, даже если это технически возможно.


Я подтверждаю, что это работает. Я написал текст в строке Python Unicode, хотя: ssid="\U0001F4A9"и затем я написал его с file.write(ssid.encode("UTF-8")). Прочитать ssidфайл xxdи скопировать байты без пробелов. Строка в моем конфиге теперь читает ssid=f09f92a9.
Кристоф Де Тройер

2

Вы можете взять ssid, в данном случае «iPhone моего имени» (без кавычек), и конвертировать в гекс, используя https://www.browserling.com/tools/text-to-hex .

Возьмите результат, в этом случае 4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65 и удалите пробелы.

Или в баш

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

Обновите /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
}

Затем выйдите из редактора и в терминале:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Если у вас нет ошибок, попробуйте подключиться. Должно сработать. Просто убедитесь, что ваше шестнадцатеричное значение ssid НЕ в кавычках и не содержит пробелов.

Ура!


1

Вы должны переименовать свой iPhone, чтобы удалить пробелы ... это можно сделать в меню «Настройки»> «Основные»> «О программе».

Как только вы выбрали имя без пробелов, вы сможете подключиться к горячей точке, которая не вызывает проблем.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.