当前位置:   article > 正文

Linux 802.11n CSI Tool调通monitor模式---2022/03/28_iwlwifi的monitor各参数配置0x4101

iwlwifi的monitor各参数配置0x4101


根据官网的一些说明,以及网上的一些经验贴,结合自己在调试monitor模式过程遇到的一些坑,由于各个帖子之间的适用性不同,所以在整个调试过程中需要多方参照,按照自己的配置情况来做权衡,这里做个记录。

0 参考资料

1、Linux 802.11n CSI Tool
2、从零开始的Linux 802.11WiFi CSITool(AP和monitor模式均亲测可用)
3、[原创]Linux 802.11n CSI tool Monitor模式
4、CSI Tool安装使用讲解
5、CSI Tools 工具的安装 Intel 5300 + Ubuntu14.04
非常感谢大佬的填坑。

1 准备工作

  1. 两台装有5300的网卡的PC
  2. 电脑系统为Ubuntu14.04版本

2 配置流程

2.1 升级内核

升级内核的步骤为解压、编译、安装、重启。
首先下载精简版内核。我这里下载的是式微式昧提供的内核版本。
将文件进行解压。使用指令:

tar -xvf intel-5300-csi-github-master.tar.gz
  • 1

对文件进行编译:

cd intel-5300-csi-github
make oldconfig
  • 1
  • 2

一直按回车确定

make menuconfig
  • 1

弹出窗口,默认内核配置,先save生成.config文件再退出。
(这几个指令这里和我之前升级成4.1.10+内核的指令有所不同,没去深究)

make -j8//这一步耗时半个小时
sudo make install modules_install
sudo make install
sudo make install modules_install
  • 1
  • 2
  • 3
  • 4

替换内核并更新:

sudo mkinitramfs -o /boot/initrd.img-`cat include/config/kernel.release` `cat include/config/kernel.release`
make headers_install
sudo mkdir /usr/src/linux-headers-`cat include/config/kernel.release`
sudo update-grub 
  • 1
  • 2
  • 3
  • 4

最后重启:

sudo reboot
  • 1

2.2 官方指导步骤

在升级内核的基础上,使用官网的指导进行配置。

2.2.0 准备
sudo apt-get install gcc make linux-headers-$(uname -r) git-core
sudo apt-get install iw
  • 1
  • 2
2.2.1 构建和安装修改后的驱动程序
CSITOOL_KERNEL_TAG=csitool-$(uname -r | cut -d . -f 1-2)
git clone https://github.com/dhalperi/linux-80211n-csitool.git
cd linux-80211n-csitool
git checkout ${CSITOOL_KERNEL_TAG}
make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/iwlwifi modules
sudo make -C /lib/modules/$(uname -r)/build M=$(pwd)/drivers/net/wireless/iwlwifi INSTALL_MOD_DIR=updates \
    modules_install
sudo depmod
cd ..
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
2.2.2 安装修改后的固件
git clone https://github.com/dhalperi/linux-80211n-csitool-supplementary.git
for file in /lib/firmware/iwlwifi-5000-*.ucode; do sudo mv $file $file.orig; done
sudo cp linux-80211n-csitool-supplementary/firmware/iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/
sudo ln -s iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/iwlwifi-5000-2.ucode
  • 1
  • 2
  • 3
  • 4
2.2.3 构建用户空间日志工具
make -C linux-80211n-csitool-supplementary/netlink
  • 1
2.2.4 启用日志记录和测试
sudo modprobe -r iwlwifi mac80211
sudo modprobe iwlwifi connector_log=0x1
sudo killall wpa_supplicant
  • 1
  • 2
  • 3

先开一个终端,使用ping命令联通路由器,而后执行以下指令进行日志记录。

sudo linux-80211n-csitool-supplementary/netlink/log_to_file csi.dat
  • 1

这里不再赘述,我的另外一篇博文有讲到(对应的是AP模式获取数据)。
2021/12/14—搭建5300网卡获取csi数据

2.3 修改驱动

这里我参考的是魂灵序曲的做法,不用每次都需要执行指令“sudo modprobe iwlwifi connector_log=0x1”才可以记录数据。

cd ~/intel-5300-csi-github/drivers/net/wireless/iwlwifi/dvm
cp main.c main.bak.c
gedit main.c
  • 1
  • 2
  • 3

使用ctrl+f功能查找到“connector_log”
将“priv->connector_log=iwlwifi_mod_params.connector_log;”修改为“priv->connector_log=1;后保存。
而后重新编译:

cd ~/intel-5300-csi-github
sudo make install modules_install
sudo make install
sudo update-grub
  • 1
  • 2
  • 3
  • 4

2.4 monitor模式收数

重点来了。

2.4.1 下载安装Iorcon
 sudo apt-get install libpcap-dev
 git clone https://github.com/dhalperi/lorcon-old.git
 cd lorcon-old
 ./configure
 make
 sudo make install
 cd ~/linux-80211n-csitool-supplementary/injection
 make
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
2.4.2 替换脚本

由于已经改了驱动,所以我这里参考的是魂灵序曲的脚本。
发送端修改setup_inject.sh文件

cd ~/linux-supplementary/injection
cp setup_inject.sh setup_inject.bak.sh
gedit setup_inject.sh 
  • 1
  • 2
  • 3

改成以下内容:

#!/usr/bin/sudo /bin/bash
service network-manager stop
WLAN_INTERFACE=$1
SLEEP_TIME=2
modprobe iwlwifi debug=0x40000
if [ "$#" -ne 3 ]; then
    echo "Going to use default settings!"
    chn=64
    bw=HT20
else
    chn=$2
    bw=$3
fi
sleep $SLEEP_TIME
ifconfig $WLAN_INTERFACE 2>/dev/null 1>/dev/null
while [ $? -ne 0 ]
do
    ifconfig $WLAN_INTERFACE 2>/dev/null 1>/dev/null
done
sleep $SLEEP_TIME
echo "Add monitor mon0....."
iw dev $WLAN_INTERFACE interface add mon0 type monitor
sleep $SLEEP_TIME
echo "Bringing $WLAN_INTERFACE down....."
ifconfig $WLAN_INTERFACE down
while [ $? -ne 0 ]
do
    ifconfig $WLAN_INTERFACE down
done
sleep $SLEEP_TIME
echo "Bringing mon0 up....."
ifconfig mon0 up
while [ $? -ne 0 ]
do
    ifconfig mon0 up
done
sleep $SLEEP_TIME
echo "Set channel $chn $bw....."
iw mon0 set channel $chn $bw
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

接收端修改setup_monitor_csi.sh文件:

cd ~/linux-supplementary/injection
cp setup_monitor_csi.sh setup_monitor_csi.sh.bak.sh
gedit setup_monitor_csi.sh 
  • 1
  • 2
  • 3

修改成以下的内容:

#!/usr/bin/sudo /bin/bash
service network-manager stop
SLEEP_TIME=2
WLAN_INTERFACE=$1
if [ "$#" -ne 3 ]; then
    echo "Going to use default settings!"
    chn=64
    bw=HT20
else
    chn=$2
    bw=$3
fi
echo "Bringing $WLAN_INTERFACE down....."
ifconfig $WLAN_INTERFACE down
while [ $? -ne 0 ]
do
    ifconfig $WLAN_INTERFACE down
done
sleep $SLEEP_TIME
echo "Set $WLAN_INTERFACE into monitor mode....."
iwconfig $WLAN_INTERFACE mode monitor
while [ $? -ne 0 ]
do
    iwconfig $WLAN_INTERFACE mode monitor
done
sleep $SLEEP_TIME
echo "Bringing $WLAN_INTERFACE up....."
ifconfig $WLAN_INTERFACE up
while [ $? -ne 0 ]
do
    ifconfig $WLAN_INTERFACE up
done
sleep $SLEEP_TIME
echo "Set channel $chn $bw....."
iw $WLAN_INTERFACE set channel $chn $bw
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
2.4.3 指令执行

接收端:

cd ~/linux-supplementary/injection
sudo ./setup_monitor_csi.sh wlan0 64 HT20//64表示5G频段,13表示2.4G
//wlan0这里要改成自己的网卡名称
sudo ../netlink/log_to_file test.dat
  • 1
  • 2
  • 3
  • 4

发送端:

cd ~/linux-supplementary/injection
./setup_inject.sh wlan2 64 HT20//wlan2要使用ifconfig进行查找来确定自己的网卡
sudo echo 0x4101 | sudo tee /sys/kernel/debug/ieee80211/phy0/iwlwifi/iwldvm/debug/monitor_tx_rate //这一段指令也可以加到setup_inject.sh文件中
sudo ./random_packets 100000 100 1 1000
  • 1
  • 2
  • 3
  • 4

第三步过于繁杂,可以自行写成脚本,关于0x4101的参数,如下图所示。
在这里插入图片描述
最后一个指令,第一个参数是包的数量;第二个是包的长度;第三个是模式,选1;第四个参数是包与包的间隔。(感谢csdn小伙伴的提醒)

3 踩坑汇总

1、安装内核时没有在root目录下,导致内核恐慌。
2、网卡的问题,执行.sh文件之后,会停用网卡,所以需要启动网络功能的话需要采用指令:

sudo service network-manager restart
  • 1

最后来谈谈为什么两个网卡之间可以进行通信,参考以下的回答。
网卡间是怎么通信的
也许计算机网络课本里会讲得更为清楚一些,暂且先放着。
最后,预祝看着这篇文章的小伙伴都能采到理想的数据。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/76508
推荐阅读
相关标签
  

闽ICP备14008679号