zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android系统启动过程分析
    android的logcat 用法整理
    git 使用详解(10) 远程分支
    android的logcat 用法整理
    android Binder工作流程
    android Binder工作流程
    git log 小结
    linux patch 命令小结
    windows 中 \r\n 区别于 类unix中的\n 疑问 迎刃而解
    Mysql Error Code : 1436 Thread stack overrun
  • 原文地址:https://www.cnblogs.com/kayj/p/13648556.html
Copyright © 2011-2022 走看看