Wie konfiguriere ich wpa_supplicant mit der Standard-iPhone-SSID?

9

Neuere iPhones senden eine SSID im Hotspot-Modus als solche:

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

Ich habe diese SSID in der GUI beobachtet.

Wenn ich die SSID über die Befehlszeile abrufe:

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

Im iPhone wird Folgendes angezeigt:

My Name's iPhone

Wenn ich in wpa_supplicant.conf Folgendes eingebe:

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

Der Raspberry Pi stellt keine Verbindung zum iPhone-Hotspot her.

Wenn wpa_supplicant.confich jedoch Folgendes eingebe:

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

Ich erhalte eine Fehlermeldung in der Befehlszeile.

$ 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

Über die GUI erhalte ich den Fehler "Ungültiges Argument".

Wenn, in wpa_supplicant.confgebe ich ein:

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

Dann stellt raspbian keine Verbindung her und stellt eine Verbindung zu einem Netzwerk mit niedrigerer Priorität her (vorausgesetzt, ich habe die Prioritäten richtig eingestellt, die ich getestet habe).

ericmjl
quelle
Warum stellst du das nicht einfach SSIDauf dem iPhone ein? Ich möchte sowieso nicht, dass jeder "Joe Bloggs iPhone" sieht und ein vernünftiges setzt SSID.
Milliways
Dazu muss der iPhone-Name meines Kollegen geändert werden, was ich lieber nicht tun würde. Der Zweck ist es, das Internet auf einer Feldseite zu erhalten, auf der wir Daten mit dem Himbeer-Pis sammeln, damit die Zeit korrekt eingestellt werden kann.
Ericmjl
@ Milliways: Auf keinen Fall möchte ich Ihrem Vorschlag als mögliche Lösung widersprechen. Wenn dies mein eigenes Gerät wäre, würde ich genau das tun, was Sie vorgeschlagen haben :).
Ericmjl
Wie haben Sie das festgestellt SSID? Das '\' ist ein normales 'NIX-Escape-Zeichen. Ich denke, dies abgeleitet von Unicode (vielleicht U + 2019)
Milliways
@ Milliways: Ich habe meinen Beitrag mit Details darüber aktualisiert, wie ich die SSIDs abgerufen habe. Über die GUI erhalte ich diejenigen mit dreifachen Schrägstrichen. Vom Terminal bekomme ich die Version mit \xE52\x80\x99.
Ericmjl

Antworten:

2

Die iPhone-Eingabeaufforderung enthält das Unicode-Zeichen U + 2019 "einfaches Anführungszeichen". Dies ist gültig (wenn sehr unpraktisch).

Es ist einfach genug, Unicode-Zeichen in Zeichenfolgen aufzunehmen. Das Folgende würde dies an der bashEingabeaufforderung wiederholen.

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

Die (sehr skizzenhafte) Dokumentation von man wpa_supplicant.confscheint nicht anzugeben, wie der ssidParameter interpretiert wird. Sie können das obige Formular ausprobieren $'My Name\u2019s iPhone'und prüfen, ob dies hilfreich ist.

HINWEIS Die Zeichenfolge "My Name\xE52\x80\x99s iPhone"in Ihrer Frage ist kein gültiger Unicode (es gibt ein überschüssiges Zeichen 5), dies kann jedoch funktionieren, wenn Sie es korrigieren.

Milliways
quelle
Ich hatte das gleiche Problem, aber das Ändern der iPhone-SSID hat alles behoben. Vielen Dank Milliways
1

Ich habe mir angesehen, wie wpa_supplicant die Konfigurationsdatei analysiert, und es scheint, als würde es die genauen Bytes zwischen ssid="und dem letzten extrahieren ". Escapezeichen für Unicode (\ u) und Escapezeichen für Nicht-ASCII-Zeichen (\ x) funktionieren nicht.

In Ihrem Fall müssten Sie Ihre SSID wie folgt angeben:

    ssid="My Name’s iPhone"

Was in einem Hex-Editor so aussehen würde:

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

Wenn Sie die Ausgabe von verwenden iw(bei der es sich nicht um ASCII-Zeichen handelt), können Sie mit Python die genauen Bytes interpretieren und in eine Datei schreiben:

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

Beachten Sie, dass Sie, wenn Sie mit der SSID eine Verbindung zu einem Zugriffspunkt herstellen möchten, A so called "SSID"diese wie folgt eingeben können : ssid="A so called "SSID"". Dies liegt daran, dass wpa_supplicant nach den Bytes zwischen dem ersten und dem letzten Anführungszeichen in einer Zeile sucht.

Eine Einschränkung, die ich gefunden habe, ist, dass wpa_supplicant.conf keine Zeilenumbruchzeichen (0x0A) in der SSID akzeptiert, obwohl dies technisch möglich ist.

KyotoFox
quelle
Ich bestätige, dass dies funktioniert. Ich habe den Text jedoch in einer Unicode-Python-Zeichenfolge geschrieben: ssid="\U0001F4A9"und dann habe ich ihn mit geschrieben file.write(ssid.encode("UTF-8")). Lesen Sie die ssidDatei mit xxdund kopieren Sie die Bytes ohne Leerzeichen. Die Zeile in meiner Konfiguration lautet jetzt ssid=f09f92a9.
Christophe De Troyer
1

Sie müssen Ihr iPhone umbenennen, um Leerzeichen zu entfernen. Dies kann unter Einstellungen> Allgemein> Info erfolgen.

Sobald Sie einen Namen ohne Leerzeichen ausgewählt haben, können Sie eine Verbindung zu einem Hotspot ohne Probleme herstellen.

iAN_MiLES
quelle
0

Sie können die ssid, in diesem Fall "My Name's iPhone" (ohne Anführungszeichen), verwenden und unter https://www.browserling.com/tools/text-to-hex in hex konvertieren .

Nehmen Sie das Ergebnis, in diesem Fall 4d 79 20 4e 61 6d 65 27 73 20 69 50 68 6f 6e 65, und entfernen Sie die Leerzeichen.

Aktualisieren Sie /etc/wpa_supplicant/wpa_supplicant.conf:

network = {
    ssid=4d79204e616d652773206950686f6e65
    psk="your passphrase"
    key_mgmt=WPA-PSK
}

Beenden Sie dann den Editor und im Terminal:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Wenn Sie keine Fehler haben, versuchen Sie, eine Verbindung herzustellen. Sollte arbeiten. Stellen Sie einfach sicher, dass Ihr ssid-Hex-Wert NICHT in Anführungszeichen steht und keine Leerzeichen enthält.

Prost!

Tiffany Antopolski
quelle