2014年1月13日 星期一

透過命令列模式連線 WPA/WPA2 無線網路 - 特別篇(WPS 與 PIN 碼)

一般我們都是透過密碼來連到 WPA/WPA2 加密的無線網路,請參考此篇

但少數情況我們會想要透過 WPS 功能所提供的 PIN 碼來連線網路。

WPS (Wi-Fi Protected Setup),基本上是提供讓使用者設定 Wi-Fi 的方便工具,現在市售無線基地台,都會提供一個按鈕,通常會畫一個鑰匙在按鈕上,那個按鈕按下去,透過 Windows 的程式操作就會自動連線起來了,您的無線基地台手冊上面應該會說明。

WPS 也提供 PIN 碼的操作,就是不按按鈕,直接透過 Windows 上面可愛的小程式,輸入廠商提供的 PIN 碼,也可以快速連線,甚至自動幫您設定破解難度很高的無線網路密碼,以供其他使用者連線的時候可以使用。PIN 碼長度固定為 8 位數,純數字。

以下提供的方法,是您需要 PIN 碼來操作的,因為在 Linux 的環境下,沒有 Windows 或者廠商提供的可愛小程式,您通常只有黑色深邃的 terminal 可以使用。

預備

請參考此篇前面的預備部份,關閉干擾程式,並且確定無線網卡是開啟的。

取得無線基地台 BSSID

透過 iwlist 來取得 BSSID,假設您的網卡是 wlan1,如果不是請自行轉換:
$ sudo iwlist wlan1 scan | egrep -i 'address|essid'
          Cell 01 - Address: 11:22:33:44:55:66
                    ESSID:"wpa-ap"


Address: 後面的字串就是 BSSID,在這裡是 11:22:33:44:55:66,請自行參考您的輸出結果。

產生 WPA 設定檔

先用文字編輯器開啟一個檔案,檔名自取,假設在這裡叫做 wps.cnf,輸入內容如下:
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

存檔,關閉。

連線

透過以下指令,使用 wpa_supplicatn 連線無線基地台,假設網路卡名稱為 wlan1:
$ sudo wpa_supplicant -Dnl80211,wext -iwlan1 -cwps.cnf -B

如果沒有看到錯誤訊息,太棒了,下一步。

設定 PIN 碼

使用 wpa_cli 來指定 PIN 碼,輸入 sudo wpa_cli 來進入互動模式:
$ sudo wpa_cli

沒有意外的話,應該會看到如下輸出:
wpa_cli v1.0
Copyright (c) 2004-2012, Jouni Malinen <j@w1.fi> and contributors

This program is free software. You can distribute it and/or modify it
under the terms of the GNU General Public License version 2.

Alternatively, this software may be distributed under the terms of the
BSD license. See README and COPYING for more details.


Selected interface 'wlan1'

Interactive mode


>

輸入 wps_reg 指令如下:
> wps_reg xx:xx:xx:xx:xx:xx <PIN>

xx:xx:xx:xx:xx:xx 是您的無線基地台 BSSID,<PIN> 是您的 PIN 碼。假設此時我們的無線基地台 BSSID 是 00:11:22:33:44:55,並且 PIN 碼是 12345678,則輸入如下:
> wps_reg 00:11:22:33:44:55 12345678

正常來說應該會馬上看到 OK 的回覆,並且 wpa_supplicant 在背景工作,如果一切順利,在幾秒鐘之內會看到 CTRL-EVENT-CONNECTED 的字樣,代表連線成功。

此時您應該還在 wpa_cli 的互動界面中,繼續輸入 save:
> save

應該會看到 OK,然後輸入 quit:
> quit

跳出程式。

透過 DHCP 取得網際網路連線資訊

此時我們已經成功透過 PIN 碼連線到無線基地台了,請參考 WPA 設定的那篇文章,設定 DHCP 資訊,以及後續的驗證,在此不贅述。

之後呢?

如果之後要連線,不需要執行設定 PIN 碼那一步驟,你可以傾印之前的 WPA 設定檔案 wps.cnf 看一看:
$ cat wps.cnf
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1

network={
    ssid="wpa-ap"
    bssid=00:11:22:33:44:55
    psk="try_to_crack_me_!!!_SecurityaleY"
    proto=RSN
    key_mgmt=WPA-PSK
    pairwise=CCMP
    auth_alg=OPEN
}

因為我們早先透過 wpa_cli 執行了 save 指令,因此密碼已經存在設定檔案裡面了,之後要連線,只要直接執行 wpa_supplicat 以及 dhclient 即可。

沒有留言:

張貼留言