赞
踩
说明:
1、自己的一点实践记录,可能有很多地方写的不好或者不对,望指正
2、获取到的CSI数据处理过程:https://blog.csdn.net/qq_20386411/article/details/83384614
是衡量信道情况的信道状态信息(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修改其值(其实可以手动找到对应位置修改)
清华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
注意:进入语言选择界面,先把无线网连上
参考链接: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数据的两种方法:AP模式和Monitor模式。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文件夹,保存数据,能看到如下界面:
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的原因可能是因为:不是无限连接模式,不会有发包的显示(?)
参考链接: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 #指定信道替换频率
-
下面记录自己当时尝试不同脚本时遇到的一些问题:
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了)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。