主要参考

1.官方资料:

1.1 官方Q&A:
http://dhalperi.github.io/linux-80211n-csitool/faq.html
点+号看详细信息,重点关注2以及13。
1.2 官方github:
https://github.com/dhalperi/linux-80211n-csitool-supplementary/

2.亲测可用安装教程:

2.1灵魂序曲的教程:虽然有的步骤有些麻烦,但是AP模式亲测可用,monitor模式可能是我驱动没改对,我这里收不到数,但也许教程本身没问题是我的问题。我也没过深究。
https://blog.csdn.net/u014645508/article/details/81359409

2.2沃一德的教程:比较精简,但monitor模式博主是亲测可用的。
https://blog.csdn.net/qq_20604671/article/details/53996239

零、Linux及CSI相关知识的学习

众所周知,计数应该从零开始(不是)。磨刀不误砍柴工,CSI Tool是基于Linux开发的,首先需要对Linux有一定的了解,才能知道教程里的每一步都是什么意思,他在做什么事情,以及为什么要这么做。
这里列举出一些基础的参考资料:

1.Linux相关

1.1 视频教程:

兄弟连的linux教程:
https://www.bilibili.com/video/BV1mW411i7Qf
看P1-P26左右基本就可以了,看视频虽然更容易理解,但是效率比较低,而且很容易犯困。

1.2 文字教程:

Cyc的文字教程:
http://www.cyc2018.xyz/
无论是什么教程核心就是要自己敲一遍

2.CSI 相关

2.1 802.11n协议:

IEEE 802.11n协议:
https://ieeexplore.ieee.org/stampPDF/getPDF.jsp?tp=&arnumber=5307322
对802.11协议以及802.11n协议有一些初步了解,重点是7-25。

2.2 CSI简介:

Wi-Fi CSI的那些事
https://blog.csdn.net/nku_zhaolinsheng/article/details/75210563
通过读paper已经对CSI肯定有一些了解了,但是这里重点是第一部分,从OSI模型的角度去看获取CSI的原理。

一、Ubuntu安装

1.下载Ubuntu

首先要注意CSI Tool本身对Ubuntu版本有要求,要求基于内核3.2-4.2版本之间,也就是基于Ubuntu12.04及Ubuntu14.04.4之间的版本。
Ubuntu 各个版本的下载地址:https://releases.ubuntu.com/

2.制作启动盘(注意备份)

可以使用官方的工具Rufus,下载地址:https://rufus.ie/
打开Rufus,先备份好原来U盘里的文件,SELECT刚刚下载的iso文件,点击START就可以了。

3.打开新电脑的BIOS设置

把刚刚做好的启动盘插入电脑,然后打开按住Del键打开BIOS的界面,默认的都是从硬盘 boot的,这里需要设置优先级,首先从USB boot。不同的电脑打开BIOS的方法不同,我的是用Del键。

4.继续开机,安装Ubuntu

从u盘boot后,按需选择安装的方式,这里建议直接覆盖安装,以免不同版本文件混淆。当然安装前如果有电脑里有重要的文件记得备份好。大概几分钟就好了。
完了首先打开安装终端(热键:Ctrl + Alt + T),先检查一下内核版本是否内核3.2-4.2版本之间。
查看内核版本命令:

cat /proc/version

然后再检查一下无线网卡是否能够正常使用,命令:

ifconfig

5.换apt源

apt默认是外国的源,会比较慢,替换为国内的镜像源,速度会快一些。

5.1 备份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
5.2 编辑list文件:
sudo gedit /etc/apt/sources.list
5.3 将source.list中的内容替换

以bjtu源为例,可以自己选择可以使用的源

deb http://mirror.bjtu.edu.cn/ubuntu/ precise main multiverse restricted universe
deb http://mirror.bjtu.edu.cn/ubuntu/ precise-backports main multiverse restricted universe
deb http://mirror.bjtu.edu.cn/ubuntu/ precise-proposed main multiverse restricted universe
deb http://mirror.bjtu.edu.cn/ubuntu/ precise-security main multiverse restricted universe
deb http://mirror.bjtu.edu.cn/ubuntu/ precise-updates main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise-backports main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise-proposed main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise-security main multiverse restricted universe
deb-src http://mirror.bjtu.edu.cn/ubuntu/ precise-updates main multiverse restricted universe
5.4 更新apt:
sudo apt-get update

二、CSI Tool安装

接下来安装CSI Tool,按顺序依次执行就行。

1.安装依赖

sudo apt-get -y install git-core kernel-package fakeroot build-essential ncurses-dev 
sudo apt-get -y install libnl-dev libssl-dev
sudo apt-get -y install iw

2.下载编译内核

2.1 下载精简版内核

精简版内核:intel-5300-csi-github-master.tar.gz
下载地址:https://download.csdn.net/download/u014645508/10579514

2.2 解压
tar -xvf intel-5300-csi-github-master.tar.gz
2.3 编译
cd intel-5300-csi-github
make oldconfig

一直按回车确定

make menuconfig

弹出窗口,生成一个.config文件,先选择save,再exit即可

make 

会编译很久,做好心理准备

sudo make install modules_install

这一步一开始会跳出couldn‘t load,先忽略

sudo make install
sudo make install modules_install
2.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 
2.5 重启
sudo reboot

重启之后进入4.2.0的内核

3.替换固件

git clone git://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/
sudo ln -s iwlwifi-5000-2.ucode.sigcomm2010 /lib/firmware/iwlwifi-5000-2.ucode

4.编译收数文件

cd ~/linux-80211n-csitool-supplementary/netlink
make

5.修改驱动

cd ~/intel-5300-csi-github/drivers/net/wireless/iwlwifi/dvm
cp main.c main.bak.c

先备份

gedit main.c

打开main.c文件,按Ctrl+F搜索“connector_log”

将“priv->connector_log=iwlwifi_mod_params.connector_log;”注释掉,修改为“priv->connector_log=1;后保存

6.重新编译

cd ~/intel-5300-csi-github
sudo make install modules_install
sudo make install
sudo update-grub

三、AP模式收数

1.电脑连上路由器

要求路由器无密码,因为CSI Tool的固件没有足够的代码空间来存储波束成形软件路径(用于测量CSI)和加密软件路径(用于WEP / WPA / WPA2 /等网络)。

若未修改驱动,需要输入,否则可以跳过

sudo modprobe -r iwldvm iwlwifi mac80211
sudo modprobe -r iwlwifi mac80211 cfg80211
sudo modprobe iwlwifi connector_log=0x1

2.ping 路由器

在终端输入:

ping 101.6.69.105 -i 0.5

101.6.69.105是路由的ip地址,-i 0.5表示发送间隔0.5s,如果间隔小于0.5s需要加上sudo。

3.收数

新建终端,在新终端中输入:

cd ~/linux-supplementary/netlink
sudo ./log_to_file test.dat

生成test.dat文件,可以打开netlink目录查看收到的dat文件。

四、monitor模式收数

monitor模式可以设定信道和发送的参数:如信道编号,信道带宽,发包数量,发包长度,发包模式以及发包间隔,相比AP模式有诸多优点。硬件上,也需要两台装有5300网卡的电脑。

0.学习shell的语法

菜鸟教程:
https://www.runoob.com/linux/linux-shell.html
monitor模式涉及到shell的脚本,想要看懂脚本可以先看看shell语法的基础教程。

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

2.替换脚本

原本injection文件夹里的脚本可能会存在一些问题,可以用这里的脚本替换原来的脚本。发送端替换setup_inject.sh,接收端替换setup_monitor_csi.sh就可以了。如果两台电脑互相发就把两台电脑的setup_inject.sh和setup_monitor_csi.sh都分别替换掉。

2.1发送端:setup_inject.sh

打开发送端电脑,进行操作:

cd ~/linux-supplementary/injection
cp setup_inject.sh setup_inject.bak.sh

更改文件前先备份

gedit setup_inject.sh 

打开setup_inject.sh,将其中的内容替换为以下内容:

setup_inject.sh

#!/usr/bin/sudo /bin/bash
sudo modprobe -r iwldvm iwlwifi mac80211
modprobe -r iwlwifi mac80211 cfg80211
modprobe iwlwifi debug=0x40000
if [ "$#" -ne 2 ]; then
    echo "Going to use default settings!"
    chn=64
    bw=HT20
else
    chn=$1
    bw=$2
fi
ifconfig wlan0 2>/dev/null 1>/dev/null
while [ $? -ne 0 ]
do
            ifconfig wlan0 2>/dev/null 1>/dev/null
done
iw dev wlan0 interface add mon0 type monitor
ifconfig wlan0 down
while [ $? -ne 0 ]
do
    ifconfig wlan0 down
done
ifconfig mon0 up
while [ $? -ne 0 ]
do
           ifconfig mon0 up
done
iw mon0 set channel $chn $bw
2.2 接收端 setup_monitor_csi.sh

打开接收端电脑,和发送端类似,进行操作:

cd /home/****/linux-supplementary/injection

其中的****为你的用户名

cp setup_monitor_csi.sh setup_monitor_csi.bak.sh

更改文件前先备份

gedit setup_monitor_csi.sh 

打开setup_monitor_csi.sh,将其中的内容替换为以下内容:

setup_monitor_csi.sh

#!/usr/bin/sudo /bin/bash
sudo modprobe -r iwldvm iwlwifi mac80211
modprobe -r iwlwifi mac80211 cfg80211
modprobe iwlwifi connector_log=0x1
if \[ "$#" -ne 2 \]; then
    echo "Going to use default settings!"
    chn=64
    bw=HT20
else
    chn=$1
    bw=$2
fi
ifconfig wlan0 2>/dev/null 1>/dev/null
while \[ $? -ne 0 \]
do
            ifconfig wlan0 2>/dev/null 1>/dev/null
done
iw dev wlan0 interface add mon0 type monitor
ifconfig wlan0 down
while \[ $? -ne 0 \]
do
    ifconfig wlan0 down
done
ifconfig mon0 up
while \[ $? -ne 0 \]
do
           ifconfig mon0 up
done
iw mon0 set channel $chn $bw

wlan0需要替换为你自己的无线网的名字。

3.monitor模式收数

3.1接收端电脑

首先,要打开接收端。

sudo service network-manager stop

先把网卡停了

cd ~/linux-supplementary/injection

切换到injection目录下

sudo ./setup_monitor_csi.sh 13 HT20

13是信道编号,HT20代表带宽20M的HT模式,具体可以对照802.11n协议。
注意接收端的信道参数要和发送端保持一致。

sudo ../netlink/log_to_file test.dat

将接受数据保存在injection文件夹下的test.dat文件中。

3.2发送端电脑
sudo service network-manager stop

同样先把网卡停了

cd ~/linux-supplementary/injection

同样cd到injection目录下

sudo ./setup_injection.sh 13 HT20

注意信道的参数要和接收机一致

sudo echo 0x4101 |sudo tee /sys/kernel/debug/ieee80211/phy0/iwlwifi/iwldvm/debug/monitor_tx_rate

0x4101是发送设置的参数,具体含义是一根发送天线,20M带宽,0.8us保护间隔,OFDM,HT模式,SISO,速率。针对不同的环境可以选择不同的参数,具体参数含义见下图。

如果想设置三发三收,参数需要改成0x1C111,意思是需要启用三天线同时启用MIMO。如果只设置三天线而不打开MIMO,这时候参数为0x1C101,也只能SIMO。
0x4101含义
如果不懂里面参数设置的含义可以再看一下802.11n协议,或者参考下面的ppt有一个简单的了解。https://wenku.baidu.com/view/00913ea164ce0508763231126edb6f1aff0071af.html

sudo ./random_packets 10000 100 1 10

四个参数分别是包的数量,包的长度,发包模式(1代表injection模式),发包的间隔(us单位)

4.可能出现的问题

4.1可能收不到数的原因

可能原因
1.硬件原因:调整好天线的角度和方向,确保发送机和接收机在一个平面上。
2.软件原因:①如果用灵魂序曲的教程(指路:https://blog.csdn.net/u014645508/article/details/82993718?utm_source=blogxgwz1),软件安装完了收不到数,可能是因为驱动没改好,可以改驱动也可以直接用这篇文章的脚本替换灵魂序曲的教程里的脚本。
②monitor_tx_rate参数是否配置正确,上图中的每个比特的含义仔细检查。

5.运行结果

接收端收数:
在这里插入图片描述
三发三收数据包:
在这里插入图片描述
祝大家都能收集到数据。

6.更新代码

6.1接收端

setup_monitor_csi.sh

#!/usr/bin/sudo /bin/bash
sudo modprobe -r iwldvm iwlwifi mac80211
while [ $? -ne 0 ]
do
    sudo modprobe -r iwldvm iwlwifi mac80211
done

modprobe -r iwlwifi mac80211 cfg80211
while [ $? -ne 0 ]
do
    modprobe -r iwlwifi mac80211 cfg80211
done

sudo modprobe iwlwifi connector_log=0x1
while [ $? -ne 0 ]
do
    sudo modprobe iwlwifi connector_log=0x1
done


:<<EOF
if [ "$#" -ne 2 ]; then
    echo "Going to use default settings!"
    chn=64
    bw=HT20
else
    chn=$1
    bw=$2
fi
EOF
chn=64
bw=HT40-
iwconfig wlan0 mode monitor 2>/dev/null 1>/dev/null
while [ $? -ne 0 ]
do
    iwconfig wlan0 mode monitor 2>/dev/null 1>/dev/null
done

ifconfig wlan0 up 2>/dev/null 1>/dev/null
while [ $? -ne 0 ]
do
  ifconfig wlan0 up 2>/dev/null 1>/dev/null
done

iw wlan0 set channel $chn $bw
echo Channel Num:$chn , Channel Bandwidth:$bw
cd ~/linux-supplementary/injection

切换到injection目录下

sudo ./setup_monitor_csi.sh 

运行程序

sudo ../netlink/log_to_file test.dat

将接受数据保存在injection文件夹下的test.dat文件中。

6.2发送端

setup_inject.sh

#!/usr/bin/sudo /bin/bash
sudo service network-manager stop
sudo modprobe -r iwldvm iwlwifi mac80211
while [ $? -ne 0 ]
do
           sudo modprobe -r iwldvm iwlwifi mac80211
done

modprobe -r iwlwifi mac80211 cfg80211
while [ $? -ne 0 ]
do
           modprobe -r iwlwifi mac80211 cfg80211
done

modprobe iwlwifi debug=0x40000
while [ $? -ne 0 ]
do
           modprobe iwlwifi debug=0x40000
done


:<<EOF
if [ "$#" -ne 2 ]; then
    echo "Going to use default settings!"
    chn=64
    bw=HT20
else
    chn=$1
    bw=$2
fi
EOF
chn=64
bw=HT40-


ifconfig wlan0 2>/dev/null 1>/dev/null
while [ $? -ne 0 ]
do
            ifconfig wlan0 2>/dev/null 1>/dev/null
done
iw dev wlan0 interface add mon0 type monitor

ifconfig wlan0 down
while [ $? -ne 0 ]
do
    ifconfig wlan0 down
done
ifconfig mon0 up
while [ $? -ne 0 ]
do
           ifconfig mon0 up
done

iw mon0 set channel $chn $bw
echo Channel Num: $chn, Channel Bandwidth: $bw

sudo echo 0x1c911 | sudo tee /sys/kernel/debug/ieee80211/phy0/iwlwifi/iwldvm/debug/monitor_tx_rate
echo 3x3MIMO,HT40-
cd ~/linux-supplementary/injection

切换到injection目录下

sudo ./setup_injection.sh 

运行代码

sudo ./random_packets 10000 100 1 10

设定发送参数

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐