前期准备
- AC86U 固件版本:3.0.0.4.382_15098
(曾使用过3.0.0.4.384_81992,虽然自带iperf3方便,但insmod内核有问题) - 虚拟机: Ubuntu 16.04 LTS 64位
硬件准备
进入主页 http://router.asus.com/ 设置账号和密码
账号名建议设置为admin(nexmon代码中默认使用admin ssh连接)
无线网络设置遵循:静态原则(关闭smartconnect,确定信道,确定带宽等等,便于分析)
同时需要开启ssh服务(连接的账号和密码为主页的后台管理账号和密码)
nexmon_csi固件安装
(期间任何步骤出错,请仔细查明或查看本文最后的“常见问题”)
-
安装一些依赖项:
sudo apt-get install git gawk qpdf flex bison
-
安装i386库(仅64位 Ubuntu需要):
点击查看代码
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386
-
克隆 nexmon 基础存储库:
git clone https://github.com/seemoo-lab/nexmon.git
-
cd
当前目录到之前克隆的 nexmon 目录并执行source setup_env.sh
以准备环境变量 -
运行
make
以从原始固件中提取 ucode、templateram 和 flashpatches -
cd
到 patch/bcm4366c0/10_10_122_20/ 并克隆此存储库以安装nexmon_csi:
git clone https://github.com/seemoo-lab/nexmon_csi.git
-
用任一个LAN口连接到你的AC86U(安装nexmon_csi固件后会启动新的dhd.ko,此时默认将eth5、eth6也就是2.4G和5G无线网络关闭掉,用无线连接此步骤会中断)
-
进入创建的子目录 nexmon_csi 并运行
make install-firmware REMOTEADDR=<ip address of your rt-ac86u>
编译的固件补丁并将其安装到您的 RT-AC86U 路由器
至此,固件安装完毕
编译相关测试软件放入
由于路由器内存小,无过多动态库,默认使用交叉编译静态文件送入到其中使用
架构为aarch64
nexutil(关键)
-
克隆 aarch64 工具链存储库:
git clone https://github.com/RMerl/am-toolchains.git
-
设置编译的一些环境变量:
export AMCC=$(pwd)/am-toolchains/brcm-arm-hnd/crosstools-aarch64-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/bin/aarch64-buildroot-linux-gnu-
export LD_LIBRARY_PATH=$(pwd)/am-toolchains/brcm-arm-hnd/crosstools-aarch64-gcc-5.3-linux-4.1-glibc-2.22-binutils-2.25/usr/lib
(请再三确认路径是否正确) -
cd
返回nexmon存储库根目录,编译并安装nexutil:
点击查看代码
cd utilities/libnexio
${AMCC}gcc -c libnexio.c -o libnexio.o -DBUILD_ON_RPI
${AMCC}ar rcs libnexio.a libnexio.o
cd ../nexutil
echo "typedef uint32_t uint;" > types.h
sed -i 's/argp-extern/argp/' nexutil.c
${AMCC}gcc -static -o nexutil nexutil.c bcmwifi_channels.c b64-encode.c b64-decode.c -DBUILD_ON_RPI -DVERSION=0 -I. -I../libnexio -I../../patches/include -L../libnexio/ -lnexio
scp nexutil admin@<ip address of your rt-ac86u>:/jffs/nexutil
ssh admin@< ip address of your rt-ac86u> "/bin/chmod +x /jffs/nexutil"
iperf3(次要,可选)
-
下载静态aarch64架构已编译好的iperf3
-
与nexutil同理,
scp iperf3 admin@<ip address of your rt-ac86u>:/jffs/iperf3
都丢入jffs目录中使用
tcpdump(重要)
-
下载静态aarch64架构已编译好的tcpdump
-
与nexutil同理,
scp tcpdump admin@<ip address of your rt-ac86u>:/jffs/tcpdump
都丢入jffs目录中使用
使用nexmon_csi
- (虚拟机完成)
cd
至nexmon_csi下的utils/makecsiparams/makecsiparams,使用
./makecsiparams -c 161/80 -C 1 -N 1 -m <MAC address of your rt-ac86u> -b 0x88
这句话的意思是生成在161信道,80Hz,收发天线1*1下的开头为0x88的编译码
例如,m+MBEQGIAQDUXWR6rNQAAAAAAAAAAAAAAAAAAAAAAAAAAA==
(以下均用路由器完成)
-
配置提取器
nexutil -Iwlan0 -s500 -b -l34 -vm+IBEQGIAgAAESIzRFWqu6q7qrsAAAAAAAAAAAAAAAAAAA==
wlan0为你需要提取的网卡,一般eth5为2.4GHz,eth6为5Ghz -
确保网卡打开并调为monitor模式,此时将丢失SSID无法用无线网连接
ifconfig
查看网卡打开情况
wl -i eth6 up
wl -i eth6 radio on
wl -i eth6 chanspec 161/80
wl -i eth6 monitor 1
ifconfig eth6 up
-
使用tcpdump抓包并保存
tcpdump -i eth6 -v dst port 5500 -w /sdcard/1.pcap -c 1000
至此已经完成csi使用,后续的分析可使用CSIKIT快速分析和画图
常见问题
-
在make install等有相关ssh连接时后显示认证失败,大概率因为Ubuntu不会自动更新公私钥文件,而你又修改了AC86U的ssh内容(例如reset后)
ssh-keygen -R <ip address of your rt-ac86u>
-
_nex_driver_io: error ret=-1 errno=95 #2
主要因为重启路由器后,路由器默认加载原本的dhd.ko,需要进入到jffs中
重新加载nexmon的dhd.ko
rmmmod dhd
insmod /jffs/dhd.ko
使用后eth5,eth6会被关闭,需要重新打开 -
insmod /jffs/dhd.ko
卡住不动或报错
一个是固件版本不支持或安装了nexmon固件后修改路由器设置而导致(安装好后请勿随意修改无线设置)
请reset后重新进行以上步骤
参考
https://blog.csdn.net/LonlyForever/article/details/133325497
https://github.com/seemoo-lab/nexmon_csi/issues/17
https://github.com/seemoo-lab/nexmon_csi/issues/34
https://github.com/userdocs/iperf3-static
https://github.com/seemoo-lab/nexmon_csi/files/5635574/tcpdump.zip