デフォルトの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はそれに接続せず、優先度の低いネットワークに接続します(優先度を正しく設定したと想定していますが、テスト済みです)。


SSIDiPhoneに設定してみませんか?とにかく「ジョーブログiPhone」をみんなに見て良識あるものにしてほしくないSSID
ミリウェイズ2016年

そのためには、同僚のiPhone名を変更する必要がありますが、変更したくありません。目的は、ラズベリーPiでデータを収集しているフィールドサイトでインターネットを利用して、時刻を正しく設定できるようにすることです。
ericmjl 2016年

@Milliways:決して解決策としての提案に反対するつもりはありません。これが私自身のデバイスである場合、私はあなたが提案したことを完全に行います:)。
ericmjl 2016年

どのように決定しましたSSIDか?「\」は通常の「NIXエスケープ文字」です。これはUnicode(多分U + 2019)から派生したものだと思います
Milliways

@Milliways:私はSSIDを取得した方法の詳細で投稿を更新しました。GUIから、スラッシュが3つあるものを取得します。端末から、でバージョンを取得し\xE52\x80\x99ます。
ericmjl 2016年

回答:


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="し、最後に"。エスケープされたユニコード(\ u)およびエスケープされた非ASCII文字(\ x)は機能しません。

あなたの場合、次のようにSSIDを指定する必要があります。

    ssid="My Name’s iPhone"

これは16進エディタでは次のようになります。

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が、行の最初と最後の引用符の間のバイトを探すためです。

私が見つけた1つの制限は、技術的には可能ですが、wpa_supplicant.confがSSIDで改行文字(0x0A)を受け入れないことです。


私はこの作品を確認します。しかしssid="\U0001F4A9"、私はユニコードのpython文字列でテキストを書きました:そしてそれをで書きましたfile.write(ssid.encode("UTF-8"))。スペースを含まないバイトでssidファイルを読み取りxxd、コピーします。私の設定の行はと表示されますssid=f09f92a9
Christophe De Troyer

2

ssid、この場合は「My Name's iPhone」(引用符なし)を取得し、https: //www.browserling.com/tools/text-to-hexを使用して16進数に変換できます

結果、この場合は4d 79 20 4e 61 6d 65 e2 80 99 73 20 69 50 68 6f 6e 65を取り、スペースを削除します。

またはbashで

    $ 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の16進数値が引用符で囲まれておらず、スペースが含まれていないことを確認してください。

乾杯!


1

スペースを削除するには、iPhoneの名前を変更する必要があります...これは、[設定]> [一般]> [バージョン情報]で実行できます。

スペースなしで名前を選択すると、問題ではなくホットスポットに接続できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.