如何使用默认的iPhone SSID配置wpa_supplicant?


9

较新的iPhone将在热点模式下广播SSID,如下所示:

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

我在GUI中观察到此SSID。

当我通过命令行获取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

通过GUI,我收到错误“无效参数”。

如果wpa_supplicant.conf输入,请输入:

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

然后raspbian将不会连接到它,而是会连接到优先级较低的网络(假设我已经正确设置了优先级,已经测试过)。


您为什么不只SSID在iPhone上进行设置?我不希望每个人都看到“ Joe Bloggs iPhone”并做出明智的选择SSID
Milliways

这就需要更改同事的iPhone名称,我不希望这样做。目的是使我们在使用树莓派收集数据的现场站点中获得互联网连接,以便可以正确设置时间。
ericmjl

@Milliways:我绝不表示不同意您的建议作为潜在的解决方案;如果这是我自己的设备,我将完全按照您的建议进行:)。
ericmjl,2016年

您如何确定SSID?'\'是普通的'NIX转义字符。我猜想这源自Unicode(也许是U + 2019)
Milliways

@Milliways:我更新了我的帖子,提供了有关如何获取SSID的详细信息。从GUI,我得到了带有三斜杠的那些。从终端,我得到的版本\xE52\x80\x99
ericmjl

Answers:


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),但是如果您更正它,则可以工作。


我遇到了同样的问题,但是更改iPhone SSID可以解决所有问题。感谢Milliways

2

我看了wpa_supplicant如何解析配置文件,似乎它提取了ssid="与last 之间的确切字节"。转义的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即使在技术上可行,也不会在SSID中接受换行符(0x0A)。


我确认这项工作。不过,我使用unicode python字符串编写了文本:ssid="\U0001F4A9"然后使用编写了文本file.write(ssid.encode("UTF-8"))。使用读取ssid文件,xxd并复制不带空格的字节。我的配置中的行现在显示为ssid=f09f92a9
Christophe De Troyer

2

您可以使用ssid(在本例中为“我的名字的iPhone”)(不带引号),然后使用https://www.browserling.com/tools/text-to-hex转换为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 hex值不在引号中,并且不包含空格即可。

干杯!


1

您必须重命名iPhone才能删除任何空格...这可以在“设置”>“常规”>“关于”中完成。

选择没有空格的名称后,您将可以连接到热点,而不会出现问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.