sân bay -s -x trả lại sản lượng cắt ngắn


0

Tôi là tác giả của wifi-wand, tiện ích dòng lệnh Ruby có thể được sử dụng như một cách đơn giản để quản lý WiFi của Mac ( https://github.com/keithrbennett/wifiwand ) mà không phải tìm hiểu tất cả các lệnh Mac OS cơ bản khác nhau và các tùy chọn của chúng.

Để có được danh sách tên mạng, tôi đã từng sử dụng airport -s nhưng thấy rằng nó không hoạt động vì các tên mạng được chứng minh là đúng (đệm trái), không có cách nào để biết các khoảng trắng hàng đầu là một phần của tên hay chỉ ở đó để định dạng. Vì vậy tôi sử dụng airport -s -x để lấy thông tin được hiển thị trong (pseudo-) XML.

Điều này hầu như luôn hoạt động, nhưng tôi đã nhận thấy ở một số vị trí, nếu có mạng máy in HP, đầu ra sẽ chấm dứt ở đâu đó trong phần tử đó. Ví dụ:

           <key>SSID_STR</key>
           <string>DIRECT-0E-HP OfficeJet 4650</string>
           <key>WPS_PROB_RESP_IE</key>
            <dict>
                    <key>IE_KEY_WPS_AP_SETUP_LOCKED</key>
                    <true/>
                    <key>IE_KEY_WPS_CFG_METHODS</key>
                    <integer>0</integer>
                    <key>IE_KEY_WPS_DEV_NAME</key>
                    <string>DIRECT-0E-HP OfficeJet 4650</string>
                    <key>IE_KEY_WPS_DEV_NAME_DATA</key>
                    <data>
                    RElSRUNULTBFLUhQIE9mZmljZUpldCA0NjUw
                    </data>
                    <key>IE_KEY_WPS_MANUFACTURER</key>
                    <string>HP</string>
                    <key>IE_KEY_WPS_MODEL_NAME</key>
                    <string>OfficeJet 4650 series

Không có -x tùy chọn, đầu ra hoạt động, nhưng, như tôi nói, có vấn đề về không gian ngăn tôi dựa vào nó:

                        SSID BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
                NETGEAR25-5G a0:04:60:1a:5a:89 -67  153,-1  Y  -- WPA2(PSK/AES/AES) 
 DIRECT-0E-HP OfficeJet 4650 ac:e2:d3:a9:d9:0f -90  6       Y  -- WPA2(PSK/AES/AES) 
                      iPhone b2:8d:6c:9f:dd:00 -49  1       Y  US WPA2(PSK/AES/AES) 
                   NETGEAR25 a0:04:60:1a:5a:87 -62  9       Y  -- WPA2(PSK/AES/AES) 
                   CBCI-4F58 60:3d:26:57:4f:5c -86  6       Y  -- WPA2(PSK/AES/AES) 

Điều gì đang xảy ra và làm thế nào tôi có thể khắc phục điều này? Cảm ơn trước.

(Vấn đề Github là tại https://github.com/keithrbennett/wifiwand/issues/20 .)

Lỗi này liên quan đến HP được xác nhận tại https://clburlison.com/macos-wifi-scanning/ , mà nói:

Khi bạn chạy sân bay với cờ --xml, lệnh sẽ không thể xuất dữ liệu xml được định dạng chính xác ... một ý tưởng là máy in HP đang phát SSID với các ký tự không an toàn ...

[gần, nhưng đó là tên mô hình, không phải SSID, dường như tạo ra lỗi]


@ Xe buýt 웃 ??? Ý bạn là SSID?
Keith Bennett

Cho đến nay tôi đã thấy 3 đầu ra của tình trạng lỗi và tất cả đều có chung điểm này: 1) Đầu ra luôn kết thúc sau khi in giá trị cho IE_KEY_WPS_MODEL_NAME và 2) chúng đều là máy in HP. (Tôi đã thấy đầu ra cho trường này cho các máy in không phải của HP không gây ra lỗi này.
Keith Bennett

1
Bạn đã thử một cái gì đó như airport -s -x | cat -v để xem có ký tự đặc biệt nào được gửi đến đầu ra không?
TJ Luoma

@Buscar Tôi không hiểu bạn đang nói gì trong bình luận đầu tiên của bạn. BSSID không có khoảng trắng, nhưng điều đó có liên quan gì đến câu hỏi?
Keith Bennett

@TJLuoma Tôi đã chạy lệnh và chuyển hướng đầu ra thành một tệp. Dòng cuối cùng là <string>HP LaserJet MFP M426fdw và không có nhân vật, đặc biệt hay cách khác, sau w. ( od -x trên tập tin được tạo ra này là dòng cuối cùng: 0073600 4d20 5046 4d20 3234 6636 7764 ).
Keith Bennett

Câu trả lời:


0

Từ bỏ ý tưởng cố gắng khớp BSSID và loại bỏ nó đến cuối dòng, tôi đã nghĩ ra điều này:

airport -s \
| sed 's# ..:..:..:..:..:.. .*##g ; s#^ *##g ; 1,1d' \
| sort -u

Các sed dòng thực sự là 3 phần:

  1. Khớp BSSID bằng cách tìm kiếm 2 ký tự được phân tách bằng dấu hai chấm, lặp lại 5 lần và sau đó mọi thứ đến cuối dòng ( .* )

  2. Khớp từ đầu dòng ( ^ ) và sau đó bất kỳ số lượng không gian ( .* )

  3. Đã xóa dòng đầu tiên ( 1,1d ) có thông tin tiêu đề mà chúng tôi không quan tâm: "SSID BSSID RSSI CHANNEL HT CC AN NINH (auth / unicast / group)"

Các sort -u dòng đảm bảo mỗi SSID chỉ hiển thị một lần.

Có thể nó không lý tưởng, nhưng nó có thể là một lựa chọn.

"Gotcha" có thể duy nhất tôi có thể nghĩ là tôi nghĩ đôi khi BSSID có thể giảm xuống 1 ký tự thay vì 2 nếu ký tự đầu tiên là 0, nhưng tôi không chắc nếu airport thực hiện điều đó và không có mạng nào tôi có quyền truy cập để bao gồm số 0 trong chúng, vì vậy tôi không thể kiểm tra nó. Có lẽ ai đó giỏi hơn về regexes có thể gợi ý một thứ tốt hơn những gì tôi có.


Tôi không hiểu vấn đề gì bạn đang cố gắng giải quyết ở đây. Tôi đã có thể sử dụng airport -s (không có -x ) để lấy tên mạng (Tôi đang phân tích cú pháp trong Ruby để tôi có rất nhiều tính linh hoạt), nhưng với các tên phải hợp lý (đệm trái), không có cách nào để phân biệt các không gian hàng đầu là một phần của tên và khoảng trắng hàng đầu đó là chỉ để định dạng. Xin lỗi, tôi không rõ về điều đó trong câu hỏi của tôi.
Keith Bennett

1
Bạn hoàn toàn đúng, tôi không thể tưởng tượng được tại sao mọi người lại đặt dấu cách ở phía trước tên SSID của họ. Tôi nghĩ bạn chỉ lo lắng về không gian trong tên SSID.
TJ Luoma

Nó cũng làm tôi ngạc nhiên, nhưng trong các chuyến đi của tôi, tôi đã tìm thấy một số SSID có không gian hàng đầu và thậm chí 1 với 3 không gian hàng đầu! Và, vâng, xin lỗi, trong thông điệp ban đầu của tôi (mà tôi đã chỉnh sửa để làm rõ) tôi đã không nói rõ rằng tôi đang đề cập đến các không gian hàng đầu.
Keith Bennett

1
Điều đó thật kỳ quái, nhưng không có gì làm tôi ngạc nhiên nữa. Chúc may mắn, tôi hy vọng bạn tìm thấy một câu trả lời
TJ Luoma
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.