1. 程式人生 > >linux 無線網絡卡的連線(命令列) Part1 —— wpa_supplicant

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=dnsmasq

no-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