Linux Kernel Support WPA3

文章目录

  • Linux Kernel Support WPA3
    • 1. WPA3是什么
    • 2. WPA3相对于WPA2改进的地方
    • 3. 如何使用WPA3
      • 3.1 驱动加载确认
      • 3.2 编译生成`wpa_supplicant`,`hostapd`工具
      • 3.3 `STA`模式下,连接WPA3加密的WIFI
        • 3.3.1 `wpa_supplicant`的使用
        • 3.3.2 `wpa_passphrase`的使用
        • 3.3.3 `wpa_cli`
        • 3.3.3 配置文件`wpa_supplicant.conf`
        • 3.3.4 连接WIFI
      • 3.4 `AP`模式下,创建WPA3加密的热点
        • 3.4.1 `hostapd`使用
        • 3.4.2 `hostapd_cli`使用
    • 4、相关网站推荐

1. WPA3是什么

WPA3全名为Wi-Fi Protected Access 3,是Wi-Fi联盟组织于2018年1月8日在美国拉斯维加斯的国际消费电子展(CES)上发布的Wi-Fi新加密协议,是Wi-Fi身份验证标准WPA2技术的的后续版本。

2018年6月26日,WiFi联盟宣布WPA3协议已最终完成。

2. WPA3相对于WPA2改进的地方

  • 防范了字典爆破攻击WPA3安全协议,采用了SAE握手协议,会限制错误密码次数,从而击败基于字典爆破的尝试。
  • 增加了安全防范WPA3采用了非认证加密的方式,支持OWE(Opportunistic Wireless Encryption),修复了KRACK(重装密钥攻击,攻击者可以获取STA和AP之间传输的数据)的问题
  • 提高了交互便利WPA3采用了DPP:Wi-Fi Device Provisioning Protocol替代WPS,即便是没有屏幕,没有交互的设备(如智能灯泡),也可以轻松安全的加入WPA 3网络。
  • 提高了算法等级WPA3增加的session key大小,加密位数升到了192位(CNSA标准),并且,即便你没有设置Wifi密码,数据也是受192位加密保护的。

3. 如何使用WPA3

要想使我们的WIFI模块连接上网络,除了WIFI芯片厂商提供的驱动外,我们还需要借助在Linux下常用的WIFI管理工具wpa_supplicanthostapd

  • wpa_supplicant:主要管理WIFISTA模式,也就是我们用于连接网络的方式。
  • hostapd:主要管理WIFIAP模式,也就是我们开启热点的方式。

3.1 驱动加载确认

通过ifconfig命令,查看我们的网卡驱动是否加载成功。

wlan0     Link encap:Ethernet  HWaddr 30:8E:7A:2C:EE:F4inet addr:240.168.100.1  Bcast:0.0.0.0  Mask:255.255.255.0UP BROADCAST MULTICAST  MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

3.2 编译生成wpa_supplicanthostapd工具

我们打开menuconfig

打开Target packages->Networking applications->hostapdwpa_supplicant选项,并且 选中Enable WPSEnable WPA3 support相关选项

我的hostapd选项配置如下:

wpa_supplicant配置选项如下:

当然,编译方式有很多种,也可以下载源码包,直接编译出来相关工具,方式大同小异,我们编译出来就行。

在这里强调一下,WPA3部分WIFI驱动可能需要在编译的时候打开相关CONFIG配置才能使用,这点一定要排查一下哦!

3.3 STA模式下,连接WPA3加密的WIFI

我们编译完成后,会生成wpa_supplicantwpa_cli的可执行文件。那么wpa_supplicantwpa_cli的区别是什么呢?

  • wpa_supplicant:控制的核心程序,其作为一个独立的守护进程,主要在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等,通常称为服务端。
  • wpa_cli:其主要用于和用户的交互,用来搜索、设置、和连接网络等,通常称为客户端。

对应上述结构, WiFi控制可以分为三大组件

  • 客户端wpa_cli命令行,与用户进行交互,获取用户的操作指令
  • 服务端wpa_supplicant 运行于后台,对应上述中间部分,功能是“上传下达”。接收wpa_cli传递的用户命令,控制硬件。
  • 底层硬件:网卡驱动

3.3.1 wpa_supplicant的使用

上面已经介绍了,wpa_supplicant是一个服务端的程序,所以我们==第一步就是运行这个服务端程序==。

wpa_supplicant --help,查看一下命令介绍

wpa_supplicant v2.9
Copyright (c) 2003-2019, Jouni Malinen <j@w1.fi> and contributorsThis software may be distributed under the terms of the BSD license.
See README for more details.This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/)usage:wpa_supplicant [-BddhKLqqstvW] [-P<pid file>] [-g<global ctrl>] \[-G<group>] \-i<ifname> -c<config file> [-C<ctrl>] [-D<driver>] [-p<driver_param>] \[-b<br_ifname>] [-e<entropy file>] [-f<debug file>] \[-o<override driver>] [-O<override ctrl>] \[-N -i<ifname> -c<conf> [-C<ctrl>] [-D<driver>] \[-m<P2P Device config file>] \[-p<driver_param>] [-b<br_ifname>] [-I<config file>] ...]drivers:nl80211 = Linux nl80211/cfg80211wext = Linux wireless extensions (generic)wired = Wired Ethernet driver
options:-b = optional bridge interface name-B = run daemon in the background-c = Configuration file-C = ctrl_interface parameter (only used if -c is not)-d = increase debugging verbosity (-dd even more)-D = driver name (can be multiple drivers: nl80211,wext)-e = entropy file-f = log output to debug file instead of stdout
......
example:wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf

我们注意一下这个example示例:

wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B

大概了解一下常用的设置选项

-D:WIFI的驱动名称

-i:网卡名称

-c:配置文件路径

-B:后台运行

选项后面,加不加空格都可以。

3.3.2 wpa_passphrase的使用

正如上面键入的命令,你会发现,配置文件我们是缺失的!那这个配置文件从哪里来呢?

从整体来说,配置文件来源可以有三个渠道:

  • wpa_passphrase工具生成初版,结合wpa_cli设置完整的conf:该方法适合第一次配置
  • 根据源码所提供的示例参考编写wpa_supplicant源码目录/example/xxx.conf
  • 直接由以往的配置文件拷贝而来:(Ps:一般来说,配置文件都是基本改变比较小的,通常都是改动SSID和PSK两个,编写过一次后,后面可以直接复制)

通常来说,后两种一般是基于你对相关配置熟悉之后,快速完成目标的选择,对于不太熟悉wpa_supplicantwpa_passphrasewpa_cli相关工具使用的人来说,建议一步一步来。

wpa_passphrase ssid psd > /etc/wpa_supplicant.conf        #输入WIFI账号,密码到配置文件

此时,wpa_passphrase会自动生成一个特殊格式的conf文件。

为了我们后续能够使用wpa_cli更新配置,我们还需要添加一些配置,下面代码放在第1,2行!

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服务啦!开启成功后,会打印log信息

# wpa_supplicant -Dnl80211 -iwlan0 -c/etc/wpa_supplicant.conf -B
Successfully initialized wpa_supplicant

Tip:当然,此时我们想要知道这些属性信息都表示哪些意思,都有哪些属性可以设置?

我们可以通过我们的编译目录wpa_supplicant下的README文件可以查看完整的详细信息。

3.3.3 wpa_cli

上面已经开启了wpa_supplicant服务,接下来我们就可以使用wpa_cli客户端进行控制

我们可以通过wpa_cli -i wlan0进入命令行接口

输入命令help可以查看各种信息,此时会有密密麻麻的指令,让你头疼…

下面列举一些常用指令:

  • scan:扫描附近热点
  • scan_result:显示附近热点
  • status:网卡状态
  • add_network:添加一个网络
  • list_network:查看添加的网络
  • set_network <network_id> ssid "xxx":给刚添加网络的序号设置网络连接账号,加上引号
  • set_network <network_id> pwd "xxx":给刚添加网络的序号设置网络连接密码,加上引号
  • remove_network <network_id>:删除一个网络
  • wpa_cli set_network <network id> priority 1 :设置优先级等
  • save_config:保存配置文件到默认路径/etc/wpa_supplicant.conf

3.3.3 配置文件wpa_supplicant.conf

用于连接WPA3的配置文件如下:

ctrl_interface=/var/run/wpa_supplicant          //用于与后台程序通信
update_config=1                                    //文件可覆盖
ap_scan=1                                      //AP扫描network={ssid="TEST"                                  //WIFI账号proto=RSN                                      //通信协议,RSN为WPA3,WPA为WPA2 ,WPAkey_mgmt=SAE WPA-PSK WPA-PSK-SHA256         //认证方式,WPA3为SAE认证pairwise=CCMP TKIP                             //密码解析scan_ssid=1                                  //扫描ssidpsk="12345678"                                   //WIFI密码sae_password="12345678"                      //WPA3的密码ieee80211w=1                                  //启用/禁用PMF
}

3.3.4 连接WIFI

 ifconfig wlan0 upwpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf
ifconfig wlan0 192.168.1.119 netmask 255.255.255.0
route add default gw 192.168.1.1

WPA3使用SAE(Simultaneous Authentication of Equals)的握手协议,所以在

3.4 AP模式下,创建WPA3加密的热点

对于AP模式,就不得不说两个工具了:hostapdhostapd_cli

hostapd_cli 是一款用作无线 AP 功能的客户端程序。它需要与 hostapd 主程序配置使用。

3.4.1 hostapd使用

hostapdwpa_supplicant相同,作为后台服务程序,其成功运行都需要一个配置文件,并且指定好一个控制接口。即需要在配置文件中,对 ctrl_interface 进行设置。

WPA3的配置文件/etc/hostapd.conf如下:

ctrl_interface=/var/run/hostapd
interface=wlan0
driver=nl80211
hw_mode=g
macaddr_acl=0
ignore_broadcast_ssid=0
auth_algs=1
ssid=A-WPA3
channel=1
wpa=2
wpa_key_mgmt=SAE
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP
wpa_passphrase=12345678
wps_cred_add_sae=1

打开hostapd服务:

hostapd -B /etc/hostapd.conf

3.4.2 hostapd_cli使用

hostapd_cli 作为 hostapd 的客户端,使用时,首先需要先启动 hostapd 主程序。

hostapd 启动后,运行 cli 客户端时,会自动去连接当前正在工作的 hostapd 进程,连接成功后,cli 客户端就可以对 hostapd 应用程序进行参数的获取和控制。

hostapd_cliwpa_cli相同,运行模式有两种:一种是shell交互方式,另一种是带参数运行,两种方式都大同小异,主要介绍一些命令。

hostapd 可以使用 set 命令,在 hostapd 启动后,对 hostapd 配置文件,即 hostapd.conf
内所有的配置项进行配置,从而实现动态修改配置的目的。

  • 动态修改配置
set ssid xxxx            #修改ssid名字
set wpa_ppassphrase xxx #修改密码
set channel xx          #修改通道
reload                  #保存到配置中
  • wps_config

wps_config用来修改无线热点名称,密码,加密方式。

wps_config <new SSID> <auth> <encr> <new key>
examples:hostapd_cli wps_config testing WPA2PSK CCMP 12345678hostapd_cli wps_config "no security" OPEN NONE ""<auth> must be one of the following: OPEN WPAPSK WPA2PSK WPAPSKALL
<encr> must be one of the following: NONE WEP TKIP CCMP
  • status、get_config

status获取无线热点信息

> status
state=ENABLED
phy=phy0
freq=2462
num_sta_non_erp=0
num_sta_no_short_slot_time=0
num_sta_no_short_preamble=0
olbc=0
num_sta_ht_no_gf=0
num_sta_no_ht=0
num_sta_ht_20_mhz=0
num_sta_ht40_intolerant=0
olbc_ht=0
ht_op_mode=0x0
cac_time_seconds=0
cac_time_left_seconds=N/A
channel=11
secondary_channel=0
ieee80211n=1
ieee80211ac=0
beacon_int=100
dtim_period=2
ht_caps_info=000e
ht_mcs_bitmask=ffff0000000000000000
supported_rates=02 04 0b 16 0c 12 18 24 30 48 60 6c
max_txpower=20
bss[0]=wl3
bssid[0]=20:32:33:59:28:04
ssid[0]=EdgerOS
num_sta[0]=1

get_config获取无线热点信息:

> get_config
bssid=20:32:33:59:28:04
ssid=EdgerOS
wps_state=configured
passphrase=987654321
psk=d1b952932f9c3c4db8fe39930c2b88d6849a01a66a7e58a2c41f82c3724549c8
wpa=2
key_mgmt=WPA-PSK
group_cipher=CCMP
rsn_pairwise_cipher=CCMP

获取信息的另一种方式:访问进程

cat /proc/net/rtl8192eu/wl3/rf_info
cat /proc/net/rtl8192eu/wl3/ap_info
cat /proc/net/rtl8192eu/wl3/tx_info_msg
cat /proc/net/rtl8192eu/wl3/all_sta_info

4、相关网站推荐

[1] http://w1.fi/releases/

[2] https://www.cnblogs.com/jackyangrui/p/9929532.html

[3] https://blog.csdn.net/weixin_34226182/article/details/89802794

[4] https://blog.csdn.net/weixin_33691700/article/details/94156801

[5] wpa_supplicant/hostapd 官网介绍

[6] https://www.cnblogs.com/hokori/p/14168584.html

WIFI驱动开发——WIFI支持WPA3连接相关推荐

  1. WIFI驱动开发——WIFI基础知识汇总

    文章目录 1. Wi-Fi起源 2. Wi-Fi定义 3. WLAN 4. 802.11协议标准 5. Wi-Fi所采用的技术 6. Wi-Fi相关术语 7. 参考文章 1. Wi-Fi起源 现在我们 ...

  2. wifi linux 驱动分析,Linux 下wifi 驱动开发(二)—— WiFi模块浅析

    一.什么是wifi 模块百度百科上这样定义: Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE8 ...

  3. Linux 下wifi 驱动开发(二)—— WiFi模块浅析

    一.什么是wifi 模块 百度百科上这样定义: Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE ...

  4. Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析

    SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...

  5. Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析

    前面学习了SDIO接口的WiFi驱动,现在我们来学习一下USB接口的WiFi驱动,二者的区别在于接口不同.而USB接口的设备驱动,我们前面也有学习,比如USB摄像头驱动.USB鼠标驱动,同样都符合Li ...

  6. Wifi驱动开发-学习笔记(一)

    一.WIFI基本概念 1.什么是wifi 这个就不多去解释了吧. 2.什么是wlan wlan又称为无线网络局域网,是相当便利的数据传输系统,它利用射频(RF)技术,通过使用电磁波构成局域网络,在空中 ...

  7. linux wifi设置端口号,Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析

    前面学习了SDIO接口的WiFi驱动,现在我们来学习一下USB接口的WiFi驱动,二者的区别在于接口不同.而USB接口的设备驱动,我们前面也有学习,比如USB摄像头驱动.USB鼠标驱动,同样都符合Li ...

  8. Linux 下wifi 驱动开发(一)—— WiFi基础知识解析

     一.WiFi相关基础概念 1.什么是wifi  我们看一下百度百科是如何定义的: Wi-Fi是一种可以将个人电脑.手持设备(如pad.手机)等终端以无线方式互相连接的技术,事实上它是一个高频无线电信 ...

  9. 佳博80系列打印机驱动开发DLL支持C#的过程

    最近小编的公司需要使用到佳博的打印机进行一系列的打印开发以及智能驱动,所以小编联系了佳博的官方客服,然后找到的他们的官方SDK开发包,进行开发,由于小编使用的是.net平台的C#语言,而官方的开发包里 ...

最新文章

  1. asp打印html,asp.net教程之利用ASP在浏览器上打印输出
  2. java 异常 最佳实践_关于JAVA异常处理的20个最佳实践
  3. 花钱的最高境界是什么?
  4. EPPlus.Core 1.5.4 报错 font '?' cannot be found docker core运行时2.1.0 alpine镜像 缺失微软字体...
  5. 3U VPX 高性能视频图像处理板( 国产ARM 信号处理板 FPGA + HI3559A )
  6. 微软商店下载显示错误,win11无法下载更新的解决方法
  7. VUE根据后端返回url链接下载文件
  8. unity 地图画格_unity开发之3d网格地图(一)
  9. 电脑无故关机,出现提示:从异常关机中恢复 bluescreen.........
  10. 手机双摄像头原理及产业解析
  11. html5 实心圆点,html5如何使用canvas画空心圆与实心圆
  12. 当他不再爱你的时候!
  13. 大量C语言、C++、C#、VC编程相关书籍下载
  14. java工具:通过文件头的魔数判断文件类型
  15. 制作一个浪漫温馨的生日礼物送她~html+css+javascript蓝色梦幻海洋3D相册(含音乐)...
  16. #父与子的编程之旅#第八章
  17. NTIRE2020~21 SISR超分 总结
  18. CSIP发布软件自主创新评估系统平台
  19. FFmpeg任意文件读取漏洞分析
  20. android绑定交通卡,安卓手机公交卡的用法

热门文章

  1. python--圆周率的计算
  2. androidframework面试,35岁程序员的人生感悟
  3. Rethinking the Smaller-Norm-Less-Informative Assumption in Channel Pruning of Convolution Layers简记
  4. selenium模拟登录163邮箱,定位账号及密码输入框问题和iframe嵌套
  5. python能制作ppt动画效果吗_原来用PPT也能做出神级的动画效果!
  6. 我唯一的愿望就是等你
  7. python中4j_GitHub - Byron4j/PythonVeterans: Python新手到老鸟的历程;基于Python 3.6
  8. JAXWS CXF WSDL first + MyEclipse + Maven Byron自學視頻03
  9. 连接git仓库失败解决办法
  10. 新的一年强势推荐5个免费的在线工具