Monitor模式和AP模式下获取WiFi的CSI信号

目的:基于WiFi信号的呼吸和心率检测


说明:

1、自己的一点实践记录,可能有很多地方写的不好或者不对,望指正

2、获取到的CSI数据处理过程:https://blog.csdn.net/qq_20386411/article/details/83384614


CSI

是衡量信道情况的信道状态信息(Channel State Information),属于PHY层,来自OFDM系统下解码的子载波。CSI是细粒度的物理信息,对环境更加敏感,所以应用于动作识别,手势识别,击键识别,跟踪等领域

CSI由无线信号传播过程中的动态成分和静态成分组成,静态成分包括LOS和静止的物体,动态成分就是人的呼吸

 

RSS(接收信号强度)采用OFMD(正交频分复用)得到56个子载波(CSI数据为56个子载波的数据)

CSI相位差数据是和呼吸频率相同的周期信号

每一组CSI值描述了子载波的振幅和相位以及其它一些关于子信道的信息,若环境中存在人活着人的运动,这会影响到WIFI信号的传播路径,所有子载波的CSI值都会被影响。CSI揭示了信道接收信号所经历的特征,例如多径效应,阴影衰落和失真

 

 

频域下的信道模型

求信道状态信息就是求信道矩阵H

无线信道一般用信道的冲击响应(Channel Impulse Response,CIR)来对信道的多径效应进行描述,在线性时不变的假设条件下,信道冲击响应可用下式表示:

 

专业术语

MIMO(Multiple-Input Multiple-Output,多输入多输出)技术:指在发射端和接收端分别使用多个发射天线和接收天线,使信号通过发射端与接收端的多个天线传送和接收,从而改善通信质量(MIMO technology is utilized toextend the complementarity property to commodity WiFi.两个主机非同步问题导致接收主机接收的信号产生相位偏移,最直观的 就是是幅度和相位图像不能互补)

NIC:网络接口卡(5300网卡),Intel 5300 NIC只能反映出CSI56个子载波中的30个

OFDM(orthogonal frequency division modulation):总频谱被划分为多个正交的子载波,无线数据使用相同的调制和编码方法在子载波上传输(OFDM splits its spectrum band (20 MHz) into multiple (56) frequency sub-bands,called subcarriers, and sends the digital bits through these subcarriers in parallel)

CFR:信道频率响应,The CSI represents the Channel Frequency Response (CFR) for each subcarrier between transmit-receive antenna pairs

 

实验工具:

主机2台,intel 5300网卡

两台主机均安装12.04Ubantu系统

简化版的CIS Tool安装包:intel-5300-csi-github-master

UltralSO软件:用于制作ubantu的U盘

Sublime text压缩包:利用其全局搜索功能检索connector_log.再利用gedit修改其值(其实可以手动找到对应位置修改)

 

安装ubantu系统:

清华PDF上指定的11.04ubantu系统,用U盘无法安装

改为12.04的ubantu系统后,用U盘可以安装

ubantu12.04系统下载链接:http://releases.ubuntu.com/12.04/

 

1、12.04ubantu U盘制作方法:

参考链接:https://jingyan.baidu.com/article/a3761b2b66fe141577f9aa51.html

PC上安装UltralSO软件,插入格式化后的U盘

打开ubantu的ISO文件,启动-写入硬盘映像-便捷启动-选择sylinux

这样含有ubantu系统的U盘制作完成,接下来就需要把系统装在主机上

 

U盘插入主机,通过U盘来启动:

主机插入U盘,打开主机,在出现界面前按下F12,直接选择U盘那个选项,然后再选择install ubantu(当时安装时,前面还有一个选项install ubantu without....,自己选的第二个选项install ubantu)

 

2、安装ubantu:参考链接https://blog.csdn.net/baolibin528/article/details/43061983

注意:进入语言选择界面,先把无线网连上

 

安装CSI Tool集成包:intel-5300-csi-github-master(简化版的集成包)

参考链接:https://blog.csdn.net/u014645508/article/details/81359409(很详细,谢谢博主的填坑)

注意:

第1步:安装完成后,需要登录用户名输入密码,否则执行第一步执行后没有权限

第2步:这一步不知道在哪里修改(没有进行)

第4步:-y前有个空格

第7步:注意是下载精简版的 intel-5300-csi-github-master.tar.gz,进行安装

第10步:一路按回车,按住回车不动半分钟 

第11步:弹出的窗口先save再exit

第12步:直接用的make -j5来运行的(j5要快一些)

第16步:注意执行结果

第17.18步好像没有任何提示

第22、23、24没有任何提示

第30步:修改log_to_file,能获取以时间戳命名csi的dat文件

 

修改驱动:必须修改,否则之后的脚本要多写几行命令设置参数,不修改也可能影响到数据的接收

打开sublime text用于搜索关键字,where选择路径时,点击最右边的add florder

修改驱动执行priv->connector_log=1;这个保存时怎么保存的?装第二个系统cd到mian.c时发现无法找到,直接手动打开main.c修改的

cd intel-5300-csi-github这里必须先到cd intel-5300-csi-github-master文件夹(安装在那个文件夹就先cd到那个文件夹)

 

 

获取CSI数据

主机获取CSI数据的两种方法:AP模式和Monitor模式。CSI支持的四种工作模式

 

AP模式获取CSI数据:

1、工具

一台主机

一个没有设置密码的路由器(手机开热点是收不到数据的/连接实验室无线网一样收不到数据)

2、AP模式下主机接收数据包,参考链接https://blog.csdn.net/u014645508/article/details/81359409

sudo ping 192.168.1.1 -i 0.05

ping后面接的是路由器的IP地址,i后面的参数是ping时间间隔,单位是秒。间隔小于0.2s需要root权限。

在主机中开启另一个终端,运行log_to_file记录CSI

3、实验结果:

主机连接没有密码的路由器

主机ping路由器的IP后,能看到如下界面:

打开新的终端,cd到netlink文件夹,保存数据,能看到如下界面:

 

 

monitor模式获取CSI数据

1、monitor优点:

使用AP模式的缺陷在于ping 命令速度比较慢,且不能精确控制发送的参数,比如接收的包数量是不可控的。Monitor模式比ap模式更加稳定,可以发送指定数量的包,可以设置发送包之间的间隔,以及信道和带宽

2、工具:

2台安装Intel 5300网卡的电脑

两台主机均需安装lorcon:在终端中通过指令安装lorcon,参考链接:

3、实现方法:https://blog.csdn.net/u014645508/article/details/82993718?utm_source=blogxgwz1(同样感谢博主的填坑)

 

注:按照博客的方法

运行脚本可能会出现权限不够的问题

解决方法:sudo sh setup_inject.sh wlan0 64 HT20(当时用的64信道,HT20这两个是参数,参数会被传入setup_inject文件)

4、实验结果:

发送数据包的主机显示界面如下,这里只发送了100k的数据包:

接收数据包的从机界面如下:

注:和博客的执行顺序相同,先运行的从机程序,从机脚本运行后会一直等待准备接收数据,直到主机开始发送数据

 

接收不到的可能原因:

1、安装完ubantu系统后,进入错误的内核导致无法收到数据。(安装完系统,开机会有多个选项(这里必须注释掉对应处的一行指令开机才会出现多个选项),选择4.2.0版本进入。之前就是因为没有注意这一点,走了2天的弯路)

2、

  • 也是设置的monitor模式,可为什么receiver接收不到任何数据呢

  •  接不到数据一般都是模式没设置好的原因,iwconfig看一下是否配好了。sudo echo 0x4101 |sudo tee /sys/kernel/debug/ieee80211/phy0/iwlwifi/iwldvm/debug/monitor_tx_rate 这步的参数不对也接不了

3、除了我们刚装好的电脑A作为client之外,我们需要另一台电脑B来开软AP,该电脑需装有可开启AP功能及支持80211n的网卡,5300网卡貌似不行,因为理论上它已经被阉割了开启AP的功能(这个是用另一个主机开的软AP,这个方法自己没有实现过)

4、安装很顺利:最终还是没有在终端看到打印的收到数据的提示

尝试过主机连接实验室的WiFi,无法收到数据

尝试过主机连接没密码的手机热点,无法收到数据

连接没有密码的路由器,就可以收到数据了

 

出现过的问题:

1、提示操作不允许时,加上sudo

2、使用tx.sh中设置速率时,出现权限不够的问题,su解决

su也无法解决时使用chmod 777 后面应该加上文件名(这种情况只适合打开脚本文件)

可以加上sudo sh -c ‘ ’来解决权限问题
sudo sh -c 'echo "This is testPage." >/usr/local/nginx/html/index.html'

注:sudo:echo命令是属于root用户的权限,但是我之前一直以为加个sudo就能够获取到root的全部权限,现在才发现这是不对的。使用sudo命令后,获取到的只是root的一部分权限。

3、设置信道的时候出现invalid argument

原始是:主机开机后能直接连接实验室的无线网,通过ifconfig可以看到发送和接收包的个数(原始模式为managed模式)

设置为mon0后能发包,但是发送数据包处显示0

执行shell脚本后,主机被设置为monitor模式

这里是0的原因可能是因为:不是无限连接模式,不会有发包的显示(?)

 

Ubantu系统中的指令操作

参考链接:https://www.cnblogs.com/nucdy/p/5251659.html

1、打开文件夹

打开某个文件:cd /文件名/

若是文件夹下的某个文件,cd /home/t2/.../injection/,最后一定要加上/

2、执行文件sh脚本(shell脚本)

sh 文件名.sh或者./脚本名

3、直接输入首字母按下tal键会自动补全,重复上一步操作,直接按下向上的箭头

4、ctr+c结束操作

5、ctr+alt+T打开一个新终端(终端可以同时打开多个)

6、sudo:echo命令是属于root用户的权限,但是我之前一直以为加个sudo就能够获取到root的全部权限,现在才发现这是不对的。使用sudo命令后,获取到的只是root的一部分权限。

7、cd ~回到根目录下

8、echo的作用就是print的作用,用于将内容打印在终端界面上

9、iwconfig查看无线网卡设置的名称(如wlan0)    ifconfig查看发包收包的具体信息

这里删除了wlan0,添加了mon0

 

 

脚本指令含义

sleep 10暂停10s

/home/wifi/csi/linux-80211n-csitool-supplementary/injection/random_packets 10000000000 100 1 1000 &

第三个命令为发送包,第一个参数为包的数量,第二个参数为包的大小,第三个参数为模式选择,设为1即可,还可设置第四个参数:发送时间间隔,单位为us

发送脚本:

#!/usr/bin/sudo /bin/bash
service network-manager stop #停止network-manager服务 

WLAN_INTERFACE=$1 #$1第一个输入参数
SLEEP_TIME=2

modprobe iwlwifi debug=0x40000 #modprobe载入指定模块

if [ "$#" -ne 3 ];  # $#传递给脚本的参数个数 -ne不等于
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 ] # $?上个命令的退出状态,或函数的返回值,大部分命令执行成功会返回 0,失败返回 1
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 #启动mon0


while [ $? -ne 0 ]
do
	ifconfig mon0 up
done
#确保mon0启动

sleep $SLEEP_TIME
echo "Set channel $chn $bw....."
iw mon0 set channel $chn $bw #指定信道替换频率

接收脚本: 

#!/usr/bin/sudo /bin/bash
service network-manager stop #停止network-manager服务 

SLEEP_TIME=2

WLAN_INTERFACE=$1  #$1第一个输入参数

if [ "$#" -ne 3 ]; # $#传递给脚本的参数个数 -ne不等于
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 #关闭指定网络设备/网卡 由参数1决定
 
while [ $? -ne 0 ] # $?上个命令的退出状态,或函数的返回值,大部分命令执行成功会返回 0,失败返回 1
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 #指定信道替换频率


已有ubantu系统情况下,基本尝试完所有脚本还是无法接收到数据。最终决定重装系统,按照几位博主方法,最终实现monitor下接收CSI数据

下面记录自己当时尝试不同脚本时遇到的一些问题:

1、两台主机,均设置为monitor模式

一台主机用于发送数据,发送数据包界面如下

问题:虽然上面显示一直在发数据,怎么确定主机确实发出了数据?

另一台从机用于接收数据,在生成的log.dat中没有任何数据,从机界面如下:

我按照另一篇博客的方法进行了如下操作,依然没有接受到任何数据,生成的log.dat中没有数据

 

①主从机的脚本都能正常运行,为什么log.dat中没有存入数据

②主机ifconfig查看发送数据包发送情况:显示发送数据为0

 

2、执行iw dev wlan0 interface add mon0 type monitor,提示命令错误没有这样的设备(重启设备好像能解决问题)

 

3、iw mon0 set channel 64 HT20提示command failed:Device or resource busy(-16)

解决方法:

其实解决这个问题很简单。如果对于kali linux系统熟悉的人一看提示就知道 原因。根本原因就是网卡没有开启监听模式(但是用iwconfig显示网卡模式为监听模式,不过用下面的方法后再执行上面的指令就没有问题了)。只要我们开启了监听模式就解决的问题。只要输入以下几条指令开启监听模式就行了。

ifconfig wlan2mon(网卡名)  down  (先关闭网卡)

iwconfig wlan2mon mode monitor  (把网卡的模式设为监听)

ifconfig wlan2mon up    (开启网卡)

iwconfig wlan2mon (查看网卡信息。有没有看到 Mode :Monitor,有就OK了)

 

 

 

 

 

 

 

  • 25
    点赞
  • 168
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值