锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Linux 平台使用wpa_supplicant配置连接wifi

时间:2022-09-27 17:30:00 连接器70

简介

wpa_supplicant是Linux BSD, Mac OSX和Windows的WPA服务,支持WPA和WPA2(IEEE 802.11i/RSN),适用于台式机/笔记本和嵌入式系统,Supplicant它用于客户端站IEEE 802.1X/WPA组件,它使用WPA身份验证器实现秘钥协商,控制漫游和IEEEE802.11认证/关联WLAN驱动程序
wpa_supplicant设计成在后台运行的"守护进程"作为控制无线连接的后端组件,wpa_supplicant支持基于文本的单独前端程序(wpa_cli)和GUI(wpa_gui)
wpa_supplicant灵活的构建配置可用于选择包含哪些功能.允许最小代码大小(WPA/WPA2-Personal 50kb 130kb的WPA/WPA2-Enterprise没有调试代码,450kb大小有大部分功能和全面的调试支持。这些例子的大小来自X构建86平台)

 

Installation Environment : Ubuntu 18.04 Download (HTTP): https://w1.fi/releases/wpa_supplicant-2.6.tar.gz Download MD5 sum: 091569eb4440b7d7f2b4276dbfc03c3c Download size: 2.6 MB Estimated disk space required: 36 MB Estimated build time: 0.4 SBU (includes optional gui)

编译安装

注意安装依赖,wpa_supplicant 依赖于 openssl , libnl

wpa_supplicant配置方式与其他开源库不同

  • wpa_supplicant目录中cp defconfig .config 复制生成编译配置

  • 可在配置文件中切割功能,适应更多平台, 如指定openssl 库的路径, 配置libnl的版本

  •  

    # Uncomment following two lines and fix the paths if you have installed OpenSSL # or GnuTLS in non-default location #CFLAGS = -I/usr/local/openssl/include #LIBS = -L/usr/local/openssl/lib # Use libnl v2.0 (or 3.0) libraries. #CONFIG_LIBNL20=y # Use libnl 3.2 libraries (if this is selected, CONFIG_LIBNL20 is ignored) #CONFIG_LIBNL32=y

  • 指定编译器,默认编译器为GCC,如需要交叉编译,需要修改Makefile

  •  

    CC=arm-linux-gnueabihf-gcc

  • 指定安装路径, 默认的安装路径为/usr/local/目录下,交叉编译时需要指定路径存储, 文件系统的包装和制作方便,不会影响系统, 需要修改指定的路径Makefile 中

  •  

    export LIBDIR ?= /usr/local/lib/ export INCDIR ?= /usr/local/include/ export BINDIR ?= /usr/local/sbin/

 

make make install

最后,生成二进制可执行文件wpa_supplicantwpa_cli

常用操作

wpa_supplicant是连接配置WiFi主要包括的工具wpa_supplicant与wpa_cli两个程序。 可以通过wpa_cli来进行WiFi保证配置与连接的前提wpa_supplicant正常启动。

相当于wpa_supplicant 是服务端,wpa_cli 是客户端。

  • 启动wpa_supplicant应用
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
  • -D 驱动程序名称(可以是多个驱动程序:nl80211,wext)
  • -i 接口名称
  • -c 配置文件
  • -B 守护过程在后台运行

配置文件 /etc/wpa_supplicant.conf在文件中添加以下代码:

ctrl_interface=/var/run/wpa_supplicant  update_config=1 // 覆盖配置强制更新 
  • ctrl_interface它指向一个目录,默认生成一个文件/var/run/wpa_supplicant/wlan0,这是local socket address,相当于UNIX Domain Socket,程序和后台程序wpa_supplicant通信(其实是wpa_supplicant作为后台服务程序,通过本地服务socket与客户端通信)

  • update_config = 1点在(客户端发送)SAVE_CONFIG更新此配置文件。

wpa_supplicant.conf配置文件分析:

update_config=1 //是否允许wpa_supplicant更新(覆盖)配置  eapol_version=1 //IEEE 802.1X / EAPOL版本  ap_scan=1 //AP扫描/选择  passive_scan=0 //是否强制被动扫描网络连接  user_mpm=1 //MPM驻留  max_peer_links=99 //最大对等链路数(0-255;默认值:99)  mesh_max_inactivity=300 //检测STA超时(以秒为单位)(默认值:300秒)  cert_in_cb=1 //cert_in_cb - 事件中是否包含对等证书转移  fast_reauth=1 //EAP快速重新认证  driver_param="field=value" ////驱动程序接口参数 country=US //国家码 dot11RSNAConfigSATimeout=60 //PMKSA寿命最长,以秒为单位; 默认43200 uuid=12345678-9abc-def0-1234-56789abcdef0 ///设备通用唯一标识符  auto_uuid=0 //自动UUID行为  device_name=Wireless Client //设备名称  manufacturer=Company //制造商  model_name=cmodel //型号名称  model_number=123 // 型号  serial_number=12345 //序列号  device_type=1-0050F204-1 //主要设备类型  os_version=01020300 //操作系统版本  config_methods=label virtual_display virtual_push_button keypad //配置方法 wps_cred_processing=0 ///处理凭证  wps_vendor_ext_m1=000137100100020001 //WPS M供应商属性1中,例如,Windows 7垂直配对 wps_nfc_dev_pw: Hexdump of Device Password //WPS的NFC密码令牌  wps_priority=0 //通过WPS添加网络优先级  bss_max_count=200 ////保内存中最大的BSS条目数  filter_ssids=0 //filter_ssids - 基于SSID过滤扫描结果  p2p_disabled=1 //禁用P2P功能  p2p_go_max_inactivity=300 //检测STA超时(以秒为单位)(默认值:300秒) p2p_passphrase_len=8 //P2P GO的密码长度  p2p_search_delay=500 //并发P2P搜索迭代之间的额外延迟  okc=0 ///机会密钥缓存(也称动密钥缓存)默认  pmf=0 ////受保护的管理框架  sae_groups=21 20 19 26 25 ///按优先顺序启用SAE有限循环组  dtim_period=2 //DTIM默认值周期(如果不覆盖网络块)  beacon_int=100 //Beacon默认间隔值(如果不覆盖网络块) ap_vendor_elements=dd0411223301 //Beacon和Probe Response其他供应商帧的特定元素 ignore_old_scan_res=0 //忽略比请求更早的扫描结果  mac_addr=0 //MAC地址策略  rand_addr_lifetime=60 //随机MAC地址的生命周期,以秒为单位(默认值:60) preassoc_mac_addr=0 //预关联操作MAC地址策略(扫描,ANQP)  gas_rand_mac_addr=0 //GAS操作的MAC地址策略  gas_rand_addr_lifetime=60 //GAS随机MAC地址的生命周期(以秒为单位)  interworking=1 ///启用互通  go_interworking=1 ///启用互通P2P GO广告  go_access_network_type=0 //P2P GO互通:接入网络类型  go_internet=1 //P2P GO互通:络是否提供到Internet的连接 go_venue_group=7 go_venue_type=1 //p2p-go互通:群组场馆信息(可选) 
hessid=00:11:22:33:44:55 //同源ESS标识符 
auto_interworking=0 //自动网络选择行为 
gas_address3=0 //GAS Address3字段行为 
ftm_responder=0 // 在扩展功能元素位70中发布精确定时测量(FTM)响应器功能。 
ftm_initiator=0 //在扩展功能元素位71中发布精确定时测量(FTM)启动器功能。 
mbo_cell_capa=3 //MBO蜂窝数据功能 
non_pref_chan=81:5:10:2 81:1:0:2 81:9:0:2 //多频段操作(MBO)非首选频道 
oce=1 //优化的连接体验(OCE) 
mem_only_psk=0 //mem_only_psk:是否仅在内存中保留PSK /密码

wpa_cli 有命令和交互的方式进行操作

 
    

wpa_cli -i wlan0 scan   //搜索附件wifi热点 wpa_cli -i wlan0 scan_result   //显示搜索wifi热点 wpa_cli -i wlan0 status //当前WPA/EAPOL/EAP通讯状态 wpa_cli -i wlan0 ping //pings wpa_supplicant

添加新的连接

 
    

wpa_cli -i wlan0 add_network //添加一个网络连接,会返回 wpa_cli set_network ssid '"name"' //ssid名称 wpa_cli set_network psk '“psk”'  //密码 wpa_cli set_network scan_ssid 1 wpa_cli set_network priority 1 //优先级

保存连接

 
    

wpa_cli -i wlan0 save_config //信息保存到默认的配置文件中,前面提到的/etc/wpa_supplicant.conf

断开连接

 
    

wpa_cli -i wlan0 disable_network

连接已有连接

 
    

wpa_cli -i wlan0 list_network //列举保存过得连接 wpa_cli -i wlan0 select_network //连接指定的ssid wpa_cli -i wlan0 enable_network //使能制定的ssid

我们一开始需要使用wpa_passphrase生成一个用于连接wifi的配置文件

 
    

[1] % wpa_passphrase usage: wpa_passphrase [passphrase] If passphrase is left out, it will be read from stdin

  • ssid:要连接的WIFI名称
  • passphrase:密码
 
    

wpa_passphrase test_wifi 12345678 > /etc/wpa_supplicant/test.conf

wpa_passphrase的配置文件示例

 
    

ctrl_interface=/var/run/wpa_supplicant # 一个目录,用于wpa_supplicant和wpa_cli的socket通信 network={ ssid="dswei" #WIFI名称 proto=WPA # proto: list of accepted protocols, 可取WPA,RSN # 如果没有设置,默认为: WPA RSN key_mgmt=WPA-PSK # 认证方式 # 如果没有设置,默认为: WPA-PSK WPA-EAP pairwise=TKIP # 如果没有设置,默认为: CCMP TKIP group=TKIP # 如果没有设置,默认为: CCMP TKIP WEP104 WEP40 psk="a123654" # WIFI密码 }

 
    

ifconfig wlan0 up wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf

  • -D 指定网卡驱动可为: nl80211 wext
  • -i 指定网卡
  • -c 指定配置文件
  • & 挂起在后台
 
    

dhclient

如果是静态IP

 
    

fconfig wlan0 192.168.1.119 netmask 255.255.255.0 route add default gw 192.168.1.1

  • 192.168.1.119 为要设置的静态ip
  • 255.255.255.0 为要设置的子网掩码
  • 192.168.1.1 为要设置的网关
  1. kill 掉 wpa_supplicant 和 dhclient 的进程 以重新测试
  2. 检查网卡名
  3. 检查配置文件
  4. -D更换驱动
  5. dns问题

加入开机脚本:

 
    

touch /etc/rc.local chmod +x /etc/rc.local

脚本内容(命令请自行更改为测试通过的命令)

如果没有测试通过,千万不能写进开机脚本,防止不能开机

 
    

#!/bin/sh ifconfig wlan0 up wpa_supplicant -B -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf #-B 参数为后台Daemon运行 dhclient exit 0

重启测试能否自动连接上wifi

可以使用nmtui连接,这是一款带有终端GUI 的软件,没有请自行百度安装。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章