Ubuntu18.04.5 server wifi的連接


背景

由於在安裝Ubuntu18.04.5 server操作系統時,沒有聯網,故安裝完成后,需要連接wifi。但是發現安裝的系統無法連接wifi,所以通過下面的方式連上wifi。
主要是通過wpa_supplicant進行連接。

1. 安裝wpa_supplicant

由於Ubuntu18.04.5 server中沒有wpa_supplicant安裝包,但是在Ubuntu16.04.7 server鏡像包下的 pool/main中可以找到如下的安裝包
也可以在http://mirrors.163.com/ubuntu/pool/main/下下載

## libreadline6_6.3-8ubuntu2_amd64.deb
## libpcsclite1_1.8.14-1ubuntu1.16.04.1_amd64.deb
# wpasupplicant_2.4-0ubuntu6.6_amd64.deb  依賴上面兩個包
# busybox-static_1.22.0-15ubuntu1.4_amd64.deb 主要udhcpc是集成在busybox里面的

## 因為wpa_supplicant依賴這兩個包
$ sudo dpkg -i libreadline6_6.3-8ubuntu2_amd64.deb libpcsclite1_1.8.14-1ubuntu1.16.04.1_amd64.deb wpasupplicant_2.4-0ubuntu6.6_amd64.deb
$ sudo dpkg -i busybox-static_1.22.0-15ubuntu1.4_amd64.deb

2. udhcpc使用

因為udhcpc是集成在busybox里面的,如果沒有找到udhcpc可執行文件,可以通過軟連接 ln -s /bin/busybox /sbin/udhcpc
直接使用udhcpc只能分配ip地址,但是沒有寫入到設備中,即這個ip地址並沒有生效。因為udhcpc需要一個默認的配置文件default.script,它實際的作用就是將分配到的ip地址通過ifconfig命令寫入設備中。
在/usr/share/udhcpc下創建了default.script,腳本內容如下:

#!/bin/sh
 
# udhcpc script edited by Tim Riker <Tim@Rikers.org>
 
[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
 
RESOLV_CONF="/etc/resolv.conf"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"
 
case "$1" in
	deconfig)
		/sbin/ifconfig $interface 0.0.0.0
		;;
 
	renew|bound)
		/sbin/ifconfig $interface $ip $BROADCAST $NETMASK
 
		if [ -n "$router" ] ; then
			echo "Deleting routers"
			while route del default gw 0.0.0.0 dev $interface 2>/dev/null ; do
				:
			done
 
			for i in $router ; do
				route add default gw $i dev $interface
			done
		fi
 
		echo -n > $RESOLV_CONF
		[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
		for i in $dns ; do
			echo adding dns $i
			echo nameserver $i >> $RESOLV_CONF # 寫入DNS服務器地址
		done
		;;
esac
 
exit 0

3.使用wpa_supplicant連接wifi

wpa_supplicant是一個連接,配置wifi的工具,主要包含wpa_supplicant與wpa_cli兩個程序。

3.1 啟動wpa_supplicant應用

$ sudo wpa_supplicant -D nl802ll -i wlp3s0 -c /etc/wpa_supplicant.conf -B
## 注意:-D后是驅動,-i后的wifi的接口有的是wlan0
## 如果沒有wpa_supplicant.conf可以自己新建一個該文件並在該配置文件中寫入以下內容:
ctrl_interface=/var/run/wpa_supplicant
update_config=1

3.2 啟動wpa_cli應用

$ sudo wpa_cli -i wlp3s0 scan        # 搜索附近的wifi網絡
$ sudo wpa_cli -i wlp3s0 scan_result # 打印搜索wifi網絡結果
$ sudo wpa_cli -i wlp3s0 add_network # 添加一個網絡連接,會返回網絡序號。第一個返回0

# 如果wifi掃描的結果,要連接加密方式是[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS](wpa加密),wifi名稱是name,wifi密碼是:psk,如下所示
$ sudo wpa_cli -i wlp3s0 set_network 0 ssid '"name"'  # 0 是上面添加一個網絡連接返回的序號,'"name"':單引號雙引號都要,name是連接的wifi名
$ sudo wpa_cli -i wlp3s0 set_network 0 psk '"psk"' # '"psk"': psk是連接wifi的密碼
$ sudo wpa_cli -i wlp3s0 enable_network 0 # 啟用網絡

# 如果連接的加密方式是[WEP][ESS] (wep加密),wifi名稱是name, wifi密碼是psk
$ sudo wpa_cli -i wlp3s0 set_network 0 ssid '"name"'
$ sudo wpa_cli -i wlp3s0 set_network 0 key_mgmt NONE
$ sudo wpa_cli -i wlp3s0 set_network 0 wep_key0 '"psk"'
$ sudo wpa_cli -i wlp3s0 enable_network 0

# 如果連接加密方式是[ESS] (無加密),wifi名稱是name
$ sudo wpa_cli -i wlp3s0 set_network 0 ssid '"name"'
$ sudo wpa_cli -i wlp3s0 set_network 0 key_mgmt NONE
$ sudo wpa_cli -i wlp3s0 enable_network 0

3.3 為無線網卡分配 ip netmask gateway dns

$ sudo udhcpc -i wlp3s0 -s /usr/share/udhcpc/default.script -q # /usr/share/udhcpc/default.script 就是安裝busybox時寫的腳本

3.4 至此已經可以連接網絡

# 保存連接
$ sudo wpa_cli -i wlp3s0 save_config

# 斷開連接
$ sudo wpa_cli -i wlp3s0 disable_network 0

# 連接已有的連接
$ sudo wpa_cli -i wlp3s0 list_network     # 列舉所有保存的連接
$ sudo wpa_cli -i wlp3s0 select_network 0 # 連接第一個保存的連接
$ sudo wpa_cli -i wlp3s0 enable_network 0 # 使用第一個保存的連接

# 斷開wifi
$ sudo ifconfig wlp3s0 down
$ sudo killall udhcpc
$ sudo killall wpa_supplicant

參考

https://segmentfault.com/a/1190000011579147
https://blog.csdn.net/sddsighhz/article/details/46005629


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM