Làm cách nào để định cấu hình wpa_supplicant với iPhone SSID mặc định?


9

Những chiếc iPhone mới hơn sẽ phát SSID ở chế độ hotspot như sau:

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

Tôi đã quan sát SSID này trong GUI.

Khi tôi lấy SSID thông qua dòng lệnh:

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

Trong iPhone, nó hiển thị dưới dạng:

My Name's iPhone

Nếu, trong wpa_supplicant.conf, tôi nhập:

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

Raspberry Pi sẽ không kết nối với điểm phát sóng iPhone.

Tuy nhiên, nếu, trong wpa_supplicant.conf, tôi nhập:

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

Tôi nhận được một lỗi trong dòng lệnh.

$ 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

Thông qua GUI, tôi nhận được lỗi "Đối số không hợp lệ".

Nếu, trong wpa_supplicant.conftôi nhập:

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

Sau đó, raspbian sẽ không kết nối với nó và sẽ kết nối với mạng ưu tiên thấp hơn (giả sử tôi có các ưu tiên được đặt chính xác, mà tôi đã kiểm tra).


Tại sao bạn không thiết lập SSIDiPhone? Tôi không muốn tất cả mọi người nhìn thấy "Joe Bloggs iPhone" và thiết lập hợp lý SSID.
Milliways

Điều đó đòi hỏi phải thay đổi tên iPhone của đồng nghiệp tôi, điều mà tôi không muốn làm. Mục đích là để có được internet trong một trang web hiện trường nơi chúng tôi đang thu thập dữ liệu với Pis mâm xôi, để nó có thể đặt thời gian chính xác.
ericmjl

@Milliways: không có nghĩa là tôi không đồng ý với đề xuất của bạn như một giải pháp tiềm năng; nếu đây là thiết bị của riêng tôi, tôi hoàn toàn sẽ làm những gì bạn đề xuất :).
ericmjl

Làm thế nào bạn xác định SSID? '\' Là ký tự thoát NIX 'bình thường. Tôi đoán điều này bắt nguồn từ Unicode (có thể là U + 2019)
Milliways

@Milliways: Tôi đã cập nhật bài viết của mình với thông tin chi tiết về cách tôi lấy SSID. Từ GUI, tôi nhận được những cái có ba dấu gạch chéo. Từ thiết bị đầu cuối, tôi nhận được phiên bản với \xE52\x80\x99.
ericmjl

Câu trả lời:


2

Dấu nhắc iPhone bao gồm ký tự Unicode U + 2019 "dấu ngoặc đơn bên phải". Điều này là hợp lệ (nếu rất bất tiện).

Thật dễ dàng để bao gồm các ký tự Unicode trong chuỗi. Sau đây sẽ lặp lại điều này tại bashdấu nhắc lệnh.

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

Tài liệu (rất sơ sài) man wpa_supplicant.confdường như không xác định cách ssidtham số được diễn giải. Bạn có thể thử mẫu ở trên $'My Name\u2019s iPhone'và xem nếu nó giúp.

LƯU Ý Chuỗi "My Name\xE52\x80\x99s iPhone"trong câu hỏi của bạn không phải là Unicode hợp lệ (có một ký tự thừa 5) nhưng điều này CÓ THỂ hoạt động nếu bạn sửa nó.


Tôi đã gặp vấn đề tương tự, nhưng thay đổi iphone SSID đã sửa mọi thứ. Cảm ơn Milliways

1

Tôi đã xem xét cách wpa_supplicant phân tích tệp cấu hình và có vẻ như nó trích xuất các byte chính xác giữa ssid="và cuối cùng ". Đã thoát unicode (\ u) và thoát các ký tự không phải mã ascii (\ x) sẽ không hoạt động.

Trong trường hợp của bạn, bạn sẽ phải chỉ định SSID của mình như thế này:

    ssid="My Name’s iPhone"

Mà sẽ trông như thế này trong một trình soạn thảo hex:

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

Nếu bạn đang sử dụng đầu ra từ iw(thoát các ký tự không phải mã ascii), bạn có thể sử dụng Python để giải thích và ghi các byte chính xác vào một tệp:

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

Lưu ý rằng nếu bạn muốn kết nối với điểm truy cập bằng SSID, A so called "SSID"nó sẽ hoạt động để nhập điểm như thế này : ssid="A so called "SSID"". Điều này là do wpa_supplicant sẽ tìm các byte giữa trích dẫn đầu tiên và cuối cùng trên một dòng.

Một giới hạn tôi tìm thấy là wpa_supplicant.conf sẽ không chấp nhận các ký tự dòng mới (0x0A) trong SSID, mặc dù về mặt kỹ thuật là có thể.


Tôi xác nhận điều này hoạt động. Tôi đã viết văn bản trong chuỗi python unicode, mặc dù: ssid="\U0001F4A9"và sau đó tôi đã viết nó với file.write(ssid.encode("UTF-8")). Đọc ssidtệp với xxdvà sao chép các byte không có khoảng trắng. Dòng trong cấu hình của tôi bây giờ đọc ssid=f09f92a9.
Barshe De Troyer

1

Bạn phải đổi tên iPhone của mình để xóa mọi khoảng trắng ... điều này có thể được thực hiện trong Cài đặt> Chung> Giới thiệu.

Một khi bạn đã chọn một tên mà không có khoảng trắng, bạn sẽ có thể kết nối với một điểm nóng không phải là vấn đề.


0

Bạn có thể lấy ssid, trong trường hợp này là "Tên của tôi" (không có dấu ngoặc kép) và chuyển đổi thành hex bằng cách sử dụng https: //www.brows Muff.com/tools/text-to-hex .

Lấy kết quả, trong trường hợp này 4d 79 20 4e 61 6d 65 27 73 20 69 50 68 6f 6e 65 và xóa khoảng trắng.

Cập nhật /etc/wpa_supplicant/wpa_supplicant.conf:

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

Sau đó thoát khỏi trình soạn thảo và trong thiết bị đầu cuối:

$ sudo ifdown wlan0
$ sudo ifup wlan0

Nếu bạn không có lỗi, hãy thử kết nối. Nên làm việc. Chỉ cần đảm bảo giá trị hex ssid của bạn KHÔNG có trong trích dẫn và không chứa dấu cách.

Chúc mừng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.