發表文章

目前顯示的是有「無線網路相關」標籤的文章

Google Summer of Code for LXNM

圖片
Google Summer of Code (簡稱 GSOC)是一個 Google 提供給全世界學生的暑期打工計畫,像是學校專題一般,是以 Mentor 指導學生的形式進行。一但學生通過指導教授的評分標準,就可以收到 Google 所準備的優渥賞金。而經過短短不到一個月緊湊的籌備和申請過程,最近這幾天終於將開始啟動今年的打工計畫,已被專案接受申請的學生們(包括我),則將要開始進行無止盡的 Coding :-) 比較可惜的是,今年 LXDE 無緣進入 Google Summer of Code (簡稱 GSOC)的 Project List,眼看著 GNOME 、 KDE 等著名 Desktop Environment 的蹤影都在清單上,真不是滋味!值得慶幸,因為眾 Distributions 如 Debian 等的幫助,LXDE 還是可以透過這些 Project 的管道,收到來自世界各地的 GSOC 學生開發者以及他們充滿創意的提案。 其中,這次 LXNM 將會是 GSOC 的重點計劃之一,我是從 Freifunk 所提出的 Proposal,主要是重新改寫 LXDE 的 Network Manager - LXNM,以補強 LXDE 的網路元件功能和支援更多網路應用。有鑑於之前設計的缺陷,因此大致畫了一個新的 LXNM 大架構圖: 整體上無太大變化,主要是增加 LXNM 與 Kernel 和硬體溝通的管道,分為純粹以 Syscall 控制硬體以及使用 script 控制網路裝置,前者好處是直接且有效率,但因為 Kernel-dependent 的因素,則需要對不同的作業系統做開發,移植困難。後者則是可由各套件維護者,輕易的自行設計各系統特有控制網路裝置的 Script,而不需要撰寫艱澀的程式碼,使移植更為容易,缺點則是效能較差。 此外,由於之前頭痛醫頭腳痛醫腳,在 LXNM Client/Daemon 的 Protocol 上之定義也是亂無章法,會趁此機會重新整理並訂出規範。 後記 因為,被 GSOC 接受了申請和提案,現在可以不用擔心短期的金錢壓力,有時間盡情完成這走到一半死掉的 LXNM Project呀。

從 Information Elements 解析無線網路的加密細節

圖片
無線網路的訊號是公開發送的,雖然無法攔截,但只要你有無線裝置,基本上都能『監聽』空氣中的無線網路封包。也因為無線通訊的本身是不安全的,就如同傳統網路可能被 ISP 或連線路徑中的 Route Node 所監聽一樣,所以無論是哪一種通訊,目前的解決方式都是採用封包或資料加密,以達成安全連線的目的。在一般網路通訊中,常聽到的方法有 Secure Sockets Layer(SSL) 這一類,而對於無線網路通訊來說,就有所謂的 WEP、WPA、WPA2 等等眾多規格。嚴格來說,SSL 和無線網路的加密並不算同一層面的實作,但是他們有相同的目的和類似的原理。 最早的無線加密非常單純,可以用 WEP 一種加密方式走遍天下,只要判斷出遠端無線基地台或存取點需要加密金鑰,我們就可以假設該加密是 WEP 。不過由於 WEP 並不安全,有心人經過封包收集後,還是能很快破出金鑰,所以,日後就出現了 WPA、WPA2 種種加密方法的進階補強版。 想要知道該無線訊號是哪一種加密方法,可以從無線裝置所提供的『 Information Elements 』去得知,從事件 IWEVGENIE 中,就可取得加密的細節 ,這部份可參考 iwlist 或 LXPanel netstat plugin 內部的實作。 Informations Elements(IEs) 的結構定義,分為兩種: 當加密方式是 WPA or Others,這也是最 IEs 原始的定義,結構如下: 當加密方式是 WPA2 時,則沒有 OUI 欄位,定義如下: Type 欄位: 0xdd: WPA or Others 0x30: WPA2 OUI 定義(3 Bytes) : WPA: 0x00, 0x50, 0xf2 WPA2: 0x00, 0x0f, 0xac * 若有 OUI 欄位(4 Bytes),最後 1 Byte 為 0x01 Data 欄位 : * 所有數值皆採用 Little Endian 因為 WPA 和 WPA2 是後來擴充上去的定義,並不在原始的 IEs 標準裡,所以許多欄位可能依遵循的標準而有所增減,不過,除非是發射端過於老舊,理論上都應該會遵循後來 WPA/WPA2 擴充的標準。在程式實作解析WPA/WPA2 時,原則上只要是無法辨別的 Type,一律視...