1. 程式人生 > >Monitor模式和AP模式下獲取WiFi的CSI訊號

Monitor模式和AP模式下獲取WiFi的CSI訊號

目的:基於WiFi訊號的呼吸和心率檢測

說明:自己的一點實踐記錄,可能有很多地方寫的不好或者不對,望指正(QQ:1070002315)

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盤可以安裝

1、12.04ubantu U盤製作方法:

PC上安裝UltralSO軟體,插入格式化後的U盤

開啟ubantu的ISO檔案,啟動-寫入硬碟映像-便捷啟動-選擇sylinux

這樣含有ubantu系統的U盤製作完成,接下來就需要把系統裝在主機上

U盤插入主機,通過U盤來啟動:

主機插入U盤,開啟主機,在出現介面前按下F12,直接選擇U盤那個選項,然後再選擇install ubantu(當時安裝時,前面還有一個選項install ubantu without....,自己選的第二個選項install ubantu)

注意:進入語言選擇介面,先把無線網連上

安裝CSI Tool整合包:intel-5300-csi-github-master(簡化版的整合包)

注意:

第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、工具

一臺主機

一個沒有設定密碼的路由器(手機開熱點是收不到資料的/連線實驗室無線網一樣收不到資料)

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,參考連結:

注:按照部落格的方法

執行指令碼可能會出現許可權不夠的問題

解決方法: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系統中的指令操作

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了)

相關推薦

Monitor模式AP模式獲取WiFi的CSI訊號

目的:基於WiFi訊號的呼吸和心率檢測 說明:自己的一點實踐記錄,可能有很多地方寫的不好或者不對,望指正(QQ:1070002315) CSI 是衡量通道情況的通道狀態資訊(Channel State Information),屬於PHY層,來自OFDM系統下解碼的子載

ESP8266在StationAP模式常用AT指令

ESP8266在TCP Client和TCP Server模式下常用AT指令 參見《ESP8266 AT 指令使用示例例》 https://www.espressif.com/sites/default/files/documentation/4b-esp8266_at_comma

大資料之Spark(八)--- Spark閉包處理,部署模式叢集模式,SparkOnYarn模式,高可用,Spark整合Hive訪問hbase類載入等異常解決,使用spark的thriftserv

一、Spark閉包處理 ------------------------------------------------------------ RDD,resilient distributed dataset,彈性(容錯)分散式資料集。 分割槽列表,function,dep Op

WiFi的STAAP模式指什麼?

WiFi的STA和AP模式指什麼? 1):AP,也就是無線接入點,是一個無線網路的建立者,是網路的中心節點。一般家庭或辦公室使用的無線路由器就一個AP。 2):STA站點,每一個連線到無線網路中的終端(如膝上型電腦、PDA及其它可以聯網的使用者裝置)都可稱為一個站點。 站點(

網頁在相容模式急速模式前者報錯、後者正常的原因查詢

1、之前在專案中將查詢按鈕加上點選回車也執行查詢,或許是之前沒有注意,只是在谷歌上試了一下;後來是因為列印功能需要在相容模式下進行,使用者反饋此環境下點選按鈕不起作用,後來自己模擬,發現是IE報錯了。 原來是IE8下只有開啟了F12才使用console.log();而這樣的

無線網絡卡AP模式station模式

AP模式: Access Point,提供無線接入服務,允許其它無線裝置接入,提供資料訪問,一般的無線路由/網橋工作在該模式下。AP和AP之間允許相互連線 Sta模式: Station, 類似於無線終端,sta本身並不接受無線的接入,它可以連線到AP,一般無線網絡卡即工作在該

如何在Windows開發Python:在cmd執行Python指令碼+如何使用Python Shell(command line模式GUI模式)+如何使用Python IDE

本文目的 希望對於,如何在Windows下,寫Python程式碼,進行Python開發,執行Python指令碼的人,看了此文後,懂得了: 什麼是cmd下面去執行Python指令碼; 什麼是Python的互動式的shell; 什麼是Python的IDE。 前提知識 看此文之前

在Linux系統Vi命令模式編輯模式進行切換

VI編輯器是Linux下用的最多也是功能最強大的文字編輯器,VI具有三種模式:命令模式、編輯模式以及末行模式,在最初使用VI開啟一個檔案的時候,處在命令模式下,這時使用命令i、I、a、A、o、O都可以進入編輯模式,而想放回到命令模式只需要在編輯模式下敲擊ESC鍵

Nginx伺服器使Thinkphp URL模式支援PATHINFO模式REWRITE模式

預設nginx伺服器是不識別pathinfo模式和rewrite模式的路由的,下面我們做一些配置,讓nginx伺服器支援這些路由模式 PATHINFO 找到location ~ \.php { #\.php$ 裡面的$去掉,並在裡面加上下面兩句

[CentOS 7系列]忘記密碼的“救星”——單用戶模式救援模式

linux 操作系統 用戶 system 忘記密碼 init是Linux系統操作中不可缺少的程序之一。 是一個由內核啟動的用戶級進程。 內核啟動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之後,就通過啟動一個用戶級程序init的方式來啟動其他用戶級的進程或服務。所

使用Xcode-debug模式release模式

哪裏 eas containe cin white ces item proc mman 在開發過程中,我們常常須要用到NSLog輸出一些信息,甚至有的開發過程。必須在控制臺查看輸出,有經驗的程序猿通過控制臺輸出就能知道整個數據交互的一個流程。可是一個

activeMQ隊列模式主題模式的Java實現

ons javax try nfa port 實現 catch n) tac 一、隊列模式 生產者 import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Dest

單例模式工廠模式

必須 order pac border 聲明 並且 span lin 實例對象 PHP------單例模式和工廠模式

【轉】FTP主動模式被動模式的比較

edit 兩個 int cti 了解 選擇 監聽端口 通訊 mod 總是記不住FTP主動和被動模式的區別。放在這裏,以備日後查閱。 FTP是僅基於TCP的服務,不支持UDP。與眾不同的是FTP使用2個端口,一個數據端口和一個命令端口(也可叫做控制端口)。通常來說這兩個端

模式保護模式區別及尋址方式

解釋 src 需求 範圍 上線 二進制表示 工作 菜鳥 相對 轉載自:http://blog.csdn.net/rosetta 64KB-4GB-64TB? 我記得大學的匯編課程、組成原理課裏老師講過實模式和保護模式的區別,在很多書本上也有談及,無奈本人理解和感悟能

基於CentOS實現LVS的nat模式DR模式

linux lvs nat dr關於LVS的錯誤總結見以下:nat模式:http://amelie.blog.51cto.com/12850951/1979172DR模式:http://amelie.blog.51cto.com/12850951/1979437來自於某國內名企架構師的說法——LVS學好了,網

LVS的NAT模式DR模式

lvs 先簡單介紹一下LVS是什麽,LVS是Linux Virtuual Server的簡稱,也就是linux虛擬服務器,是由章文松博士發起的自由軟件項目。主要用它來實現高可用集群。LVS-NAT模式:步驟:1.關閉防火墻策略及selinux設置:iptables -F;setnforce 02.啟動n

主動模式被動模式與zabbix的web管理界面使用

linux監控平臺 zabbix linux 操作系統 筆記內容:19.7 主動模式和被動模式19.8 添加監控主機19.9 添加自定義模板19.10 處理圖形中的亂碼19.11 自動發現筆記日期:19.7 主動模式和被動模式所謂主動就是客戶端主動上報數據,被動則是客戶端被動去提供數據。主動模

19.7-19.11 主動模式被動模式

19.7-19.11 主動模式和被動模式19.7 主動模式和被動模式19.8 添加監控主機19.9 添加自定義模板19.10 處理圖形中的亂碼19.11 自動發現擴展zabbix監控交換機(思科) http://tryrus.blog.51cto.com/10914693/1789847zabbix遠程執行命

C++原型模式模板模式

hide 完成 return enc span person info 步驟 招聘 DP書上的定義為:用原型實例指定創建對象的種類,並且通過拷貝這些原型創建新的對象。其中有一個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。舉個現實中的例子來介紹原型模式。找工作