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=2modprobe iwlwifi debug=0x40000 #modprobe載入指定模塊if [ "$#" -ne 3 ]; # $#傳遞給腳本的參數個數 -ne不等于 thenecho "Going to use default settings!"chn=64bw=HT20 elsechn=$2bw=$3 fi #決定參數sleep $SLEEP_TIME ifconfig $WLAN_INTERFACE 2>/dev/null 1>/dev/null #查看網絡設備配置 重新定向標準錯誤輸出while [ $? -ne 0 ] # $?上個命令的退出狀態,或函數的返回值,大部分命令執行成功會返回 0,失敗返回 1 doifconfig $WLAN_INTERFACE 2>/dev/null 1>/dev/null donesleep $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 ] doifconfig $WLAN_INTERFACE down done #確保關閉指定網絡設備/網卡sleep $SLEEP_TIME echo "Bringing mon0 up....." ifconfig mon0 up #啟動mon0while [ $? -ne 0 ] doifconfig 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=2WLAN_INTERFACE=$1 #$1第一個輸入參數if [ "$#" -ne 3 ]; # $#傳遞給腳本的參數個數 -ne不等于 then echo "Going to use default settings!" #顯示字符串chn=64bw=HT20 elsechn=$2bw=$3 fi #決定參數echo "Bringing $WLAN_INTERFACE down....." ifconfig $WLAN_INTERFACE down #關閉指定網絡設備/網卡 由參數1決定while [ $? -ne 0 ] # $?上個命令的退出狀態,或函數的返回值,大部分命令執行成功會返回 0,失敗返回 1 doifconfig $WLAN_INTERFACE down done #確保關閉指定網絡設備/網卡sleep $SLEEP_TIME echo "Set $WLAN_INTERFACE into monitor mode....." iwconfig $WLAN_INTERFACE mode monitor #設置指定無線網卡的工作模式為監聽while [ $? -ne 0 ] doiwconfig $WLAN_INTERFACE mode monitor done #確保指定無線網卡的工作模式為監聽sleep $SLEEP_TIME echo "Bringing $WLAN_INTERFACE up....." ifconfig $WLAN_INTERFACE up #啟動指定網絡設備/網卡while [ $? -ne 0 ] doifconfig $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了)
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Monitor模式和AP模式下获取WiFi的CSI信号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 鸟哥LINUX操作练习(8):Linux
- 下一篇: IR-61|1895075-34-9|七