目前支持wpa3的client毕竟还少,因此决定用树莓派作为wpa3 client,同时为了方便分析wpa3有关的supplicant和 kernel的代码流程,决定手动编译。
编译之前需要下载树莓派对应的工具链和driver patch。
https://community.cypress.com/docs/DOC-17441
git clone https://github.com/raspberrypi/tools ~/tools
git clone --depth=1 --branch rpi-4.14.y https://github.com/raspberrypi/linux
如果下载较慢可以直接通过网盘下载,我已经把对应的工具上传到了网盘
链接:https://pan.baidu.com/s/12-wwPcKhdQPEt-U9QsZ8pQ
提取码:k13o
WPA3 packet capture:
下来是步骤,按照这个步骤一定会成功
/*首先在ubuntu上编译树莓派的内核,我用的是ubuntu 18*/
sudo apt-get install git bison flex libssl-dev
/*下载工具链*/
git clone https://github.com/raspberrypi/tools ~/tools 或 unzip tools-master.zip echo PATH=$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin >> ~/.bashrc
source ~/.bashrc/*下载kernel*/
git clone --depth=1 --branch rpi-4.14.y https://github.com/raspberrypi/kernel 或 unzip linux-rpi-4.19.y.zip/*解压cypress*/
unzip cypress-fmac-v4.14.77-2019_1031.zipcd kernel
cp -r ../cypress/cypress-patch ./*给kernel打patch*/
for i in cypress-patch/*.patch; do patch -p1 < $i; done
按照默认选项一路回车就行
/*我粘贴了打完patch之后的最后一段*/
Hunk #1 succeeded at 353 (offset 298 lines).
Hunk #2 FAILED at 4376.
1 out of 2 hunks FAILED -- saving rejects to file drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c.rej
patching file drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
Hunk #1 FAILED at 1059.Hunk #2 FAILED at 1127.
2 out of 2 hunks FAILED -- saving rejects to file drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c.rej
patching file drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c.rej
patching file include/linux/mmc/sdio_ids.h
Reversed (or previously applied) patch detected! Assume -R? [n]
Apply anyway? [n]
Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file include/linux/mmc/sdio_ids.h.rej/*有个冲突的地方*/
vi drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwil_types.h
1011行的结构体重复定义,可以删掉或注释掉
/*** struct brcmf_dload_data_le - data passing to firmware for downloading*/
/*struct brcmf_dload_data_le {
* __le16 flag;
* __le16 dload_type;
* __le32 len;
* __le32 crc;
* u8 data[1];
};*//*在kernel跟目录下*/
export KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
make -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
mkdir /tmp/modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/tmp/modules modules_install/*把编译出来的image和module拷贝到树莓派*/
cd arch/arm/boot/
scp zImage pi@x.x.x.x:~/
cd /tmp/modules
tar czvf newmodules.tar.gz lib/
scp newmodules.tar.gz pi@x.x.x.x:~/**/*树莓派端*/**
mv zImage kernelwifi.img
sudo cp kernelwifi.img /boot -rf
sudo vi /boot/config.txt
在最后一行加上
kernel=kernelwifi.imgtar -jxvf newmodules.tar.gz
/*备份一下已有的driver*/
mv /lib/firmware/brcm /lib/firmware/brcm_bak
scp cypress-fmac-v4.14.77-2019_1031.zip pi@x.x.x.x:~/
unzip cypress-fmac-v4.14.77-2019_1031.zip
sudo cp firmware/* /lib/firmware/brcm/
reboot
/*重启之后*/
pi@raspberrypi:~/hostap_2_6/wpa_supplicant $ uname -a
Linux raspberrypi 4.14.114-v7+ #2 SMP Fri May 17 21:57:57 CEST 2019 armv7l GNU/Linux
supplicant:
/*树莓派下下载*/
wget https://w1.fi/cgit/hostap/snapshot/hostap_2_6.tar.gz
tar xvzf hostap_2_6.tar.gz
# SCP 并且 从Cypress中 解压 hostap_2_6 patch
tar xvzf cypress-hostap_2_6-2019_0502.tar.gz
mv cypress-hostap_2_6 hostap_2_6
cd hostap_2_6/
for i in cypress-hostap_2_6/*.patch; do patch -p1 < $i; done
cd wpa_supplicant/
vi .config
CONFIG_IEEE80211W=y
CONFIG_SAE=y
CONFIG_SUITEB=ysudo apt-get install libssl-dev libnl-dev
vi ../src/drivers/driver_nl80211.c
# line 4969
/* case WPA_KEY_MGMT_FT_IEEE8021X:mgmt = RSN_AUTH_KEY_MGMT_FT_802_1X;break;case WPA_KEY_MGMT_FT_PSK:mgmt = RSN_AUTH_KEY_MGMT_FT_PSK;break;*/
make
wpa_supplicant.conf:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
eapol_version=1
ap_scan=1
fast_reauth=1
pmf=1
network={ssid="wpa3_sae"proto=RSNkey_mgmt=SAEsae_password="1234567890"
}
最后:
#杀掉现有的supplicant
sudo killall wpa_supplicant
#run
sudo ./wpa_supplicant -c wpa_supplicant.conf -dd -i wlan0