linux 無線網絡卡的連線(命令列) Part1 —— wpa_supplicant
如果是 ubuntu 系統的話,直接使用 network-manger 就可以連線了,使用 network-manager 是最簡單最方便連線網路的方法:
如果不是使用圖形介面,是命令列,則使用 network-manager 的命令列工具: nmcli
但是如果沒有安裝 network-manager,則可以使用一個叫 wpa_supplicant
的命令(該工具最好不要與 network-manager 一起使用,會導致 wpa_supplicant 連不上無線網,因為 wpa_supplicant 是作為 network-manager 的後端的,如果 wpa_supplicant 與 network-manager 一起使用,那麼就相當於多個 wpa_supplicant 一起執行,會有點問題)。要麼配置 network-manager 不使用某個網絡卡,要麼解除安裝之:
// 配置 network-manager
sudo vi /etc/NetworkManager/NetworkManager.conf
在 keyfile 中加入不希望被 network-manager 控制的裝置的 mac 地址:
[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasqno-auto-default=06:6A:CB:D1:FD:79,46:0A:FF:4F:21:08,
[ifupdown]
managed=true[keyfile]
unmanaged-devices=mac:00:0c:43:a5:9a:00
或者解除安裝之:
sudo apt-get remove network-manager
其實 iwconfig
命令也可以連線無線網,但是其只能處理 WEP 型別的無線網加密協議,但是如果無線網路是 WPA/WPA2 加密的就只能使用 wpa_supplicant 命令了。
Any secure wifi network won’t be using WEP since it’s broken so it’s important to realize iwconfig
by itself can’t connect to the more secure WPA/WPA2.
所以現在所有的路由器基本上都是使用 WPA/WPA2 加密協議。
wpa_supplicant 連線無線網的步驟:
1 . 線檢查一下網絡卡驅動是否裝上了,網絡卡是否開啟了:
ifconfig -a // 顯示無線網絡卡一般為 wlan0,如果名字是一串很長的數字,google 如何修改 eth/wlan 名字
2 . 掃一下無線網路,看無線網絡卡是否能夠正常工作:
sudo iwlist wlan0 scan
3 . 通過無線網獲取 psk 碼:
$ sudo wpa_passphrase "ESSID" "PASSWD" > wpa.conf // ESSID 就是無線網路的名稱, PASSWD 是無線網路的密碼
$ cat wpa.conf
network={
ssid="networkname"
#psk="mypassphrase"
psk=8ada1f8dbea59704ac379538b4d9191f6a72390581b4cd7a72864cea685b1a7f
}
4 . 連線無線網路:
sudo wpa_supplicant -B -iwlan0 -c/etc/wpa.conf -Dnl80211,wext # -B 表示在後臺執行, 加上 -dd 可以輸出除錯資訊
iwconfig // 檢視一下是否獲得了 Access Point,如果沒有,那麼檢視一下是否後臺有多個 wpa_supplicant 在執行, sudo killall wpa_supplicant,在嘗試一遍。
wlan0 IEEE 802.11bgn ESSID:"networkname"
Mode:Managed Frequency:2.467 GHz Access Point: E4:F4:C6:0E:E0:51
Bit Rate=19.5 Mb/s Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:on
Link Quality=29/70 Signal level=-81 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:376 Invalid misc:44 Missed beacon:0
# ifconfig 檢視一下,如果沒有獲得 ip, 執行一下 dhclient:
sudo dhclient wlan0 # 獲取 ip
或者將上述命令寫到 /etc/network/interfaces
檔案中,這樣每次自動啟動後就可以連線無線網了:
auto lo
iface lo inet loopback
auto wlan0
iface wlan0 inet static
address 192.168.1.150
netmask 255.255.255.0
gateway 192.168.1.1
wpa-essid network-name
wpa-psk 8ada1f8dbea59704ac379538b4d9191f...
dns-nameservers 192.168.3.45 192.168.8.10 # 如果想配置 DNS 伺服器的話
也可以配置完後重啟網絡卡使其生效:
sudo ifdown wlan0 && sudo ifup -v wlan0