2014年1月13日 星期一

透過命令列模式連結 WPA/WPA2 無線網路

有些時候會需要使用命令列模式來連線無線網路,本篇假設要連線的是 WPA/WPA2。

預備

在 Linux 環境下開啟 terminal,先來確定是否有其他會干擾的程式在執行,原則上我們不希望有 networkmanager、wpa_supplicant,以及 dhclient 這三個程式同時在干擾:
$ ps -C NetworkManager,wpa_supplicant,dhclient -o pid,comm,user

可能會看到輸出如下,有些時候也會看到 dhclient 出現,雖然這裡暫時沒有:
  PID COMMAND         USER
29449 NetworkManager  root
29456 wpa_supplicant  root


這個時候可以先將這些程式關閉,因為USER 是 root 所以需要 sudo 權限:
$ sudo kill 29449 29456

以上兩個步驟也可以透過 aircrack-ng 工具包裡面提供的 airmon-ng 來一次到位:
$ sudo airmon-ng check kill

有可能關閉干擾程式後,無線網卡也被一起關閉了,可以透過 ifconfig 指令來檢查一下,比如說您的無線網卡是 wlan1,但是執行完 ifconfig 卻沒有看到,應該就是被關閉了
$ ifconfig

可以透過以下指令打開:
$ sudo ifconfig wlan1 up

取得無線基地台的網路名稱 (ESSID)

如果您已經透過其他管道知道無線基地台的網路名稱,此步驟可以跳過。
如果您還不確定,您需要透過以下指令來掃描一下無線的 ESSID,假設無線網卡是 wlan1:
$ sudo iwlist wlan1 scan | egrep -i 'address|channel|quality|essid'

可能產生輸出如下:
          Cell 01 - Address: 00:11:22:33:44:55
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=54/70  Signal level=-56 dBm
                    ESSID:"wpa-ap"


可以看到 ESSID,也就是網路名稱是 wpa-ap,您會看到您自己的基地台 ESSID,和此處不同。

產生 WPA 設定檔

我們接著要來產生初始的 WPA 設定檔案,輸入 wpa_passphrase 指令如下:
$ wpa_passphrase wpa-ap > wpa-ap.cnf
<輸入 WPA 連線的密碼>

上述的 wpa-ap 是你的無線基地台 ESSID,在這裡假設叫做 wpa-ap,請自行換成您的基地台網路名稱,wpa-ap.cnf 是產生出來的特定檔檔名,可以換成你想要取的檔案名稱。指令按下 Enter 後,會要您輸入連線的密碼,而且會以明文形式顯示在螢幕上,請留意。

這一步驟只需要做一次,之後要連線,可以省略這一步驟。

連線無線基地台

輸入以下指令以透過 wpa_supplicant 程式連線:
$ sudo wpa_supplicant -Dnl80211,wext -iwlan1 -cwpa-ap.cnf

以上指令需要以 sudo 權限執行,-D 參數指定 wpa_supplicant 可以使用的驅動程式,原則上都是 nl80211 以及 wext 兩種,應該不會改變;-i 指定要使用的界面;-c 指定剛剛產生出來的設定檔。可以注意到,所有參數和子參數中間都沒有空格

如果正常連線,會看到類似下面的輸出:
wlan1: SME: Trying to authenticate with 00:11:22:33:44:55 (SSID='wpa-ap' freq=2437 MHz)
wlan1: Trying to associate with 00:11:22:33:44:55 (SSID='wpa-ap' freq=2437 MHz)
wlan1: Associated with 00:11:22:33:44:55
wlan1: WPA: Key negotiation completed with 08:60:6e:d0:b5:34 [PTK=CCMP GTK=CCMP]
wlan1: CTRL-EVENT-CONNECTED - Connection to 00:11:22:33:44:55 completed (auth) [id=0 id_str=]


您也可以讓 wpa_supplicant 自動在背景繼續執行,否則您的 terminal 一關,連線就中斷了:
$ sudo wpa_supplicant -Dnl80211,wext -iwlan1 -cwpa-ap.cnf -B

-B 參數可以讓程式自動以 daemon 形式在背景繼續執行。

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

最後一步,通常家用無線基地台都會提供 DHCP 服務,也就是大家口中常說的 IP 分享器功能,所以我們要透過 DHCP 協定來設定 IP、netmask、routing table,以及 DNS 伺服器等等相關資訊。執行指令如下:
$ sudo dhclient wlan1

沒有意外的話,到此就順利完成了!

驗證

可以透過 ifconfig 和 netstat 驗證一下連線資訊:
$ ifconfig wlan1
wlan1     Link encap:Ethernet  HWaddr 11:22:33:99:99:99 
          inet addr:192.168.1.122  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4881 errors:0 dropped:317 overruns:0 frame:0
          TX packets:3621 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3228932 (3.2 MB)  TX bytes:487002 (487.0 KB)


$ netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 wlan1
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 wlan1


也看一下 DNS 伺服器:
$ cat /etc/resolv.conf
nameserver 192.168.1.1

總結取得的 IP 是 192.168.1.122,routing table 也更改預設路由是 wlan1,閘道是 192.168.1.1,並且 DNS 伺服器是 192.168.1.1。這代表無線基地台(也就是我們通往網際網路的閘道)的 IP 是 192.168.1.1,也同時提供 DNS 服務。

沒有留言:

張貼留言