1. 程式人生 > >[原創]Linux 802.11n CSI tool Monitor模式

[原創]Linux 802.11n CSI tool Monitor模式

Linux 802.11n CSI tool Monitor模式

使用AP模式的缺陷在於ping 命令速度比較慢,且不能精確控制傳送的引數,比如接收的包數量是不可控的。Monitor模式可以調製傳送速率、發包數量、傳送天線個數、HT模式、short/long guard interval等等,因此調通Monitor模式是必須的。期間參考了博主沃一德的CSI Tool安裝使用講解,對他的工作表示感謝。

特別說明:本文使用的指令碼適配於改過驅動的CSI Tool。如果未改過驅動,還需對指令碼進行一些修改。

如需轉載請註明出處。

共同的準備工作

啟用Monitor模式需要兩臺安裝CSI tool工具的電腦。令A電腦為接收端,B電腦為傳送端。A和B電腦均需安裝lorcon,那麼均需在A和B電腦上執行下列流程:

ctrl+alt+T開啟終端視窗,執行:

1. sudo apt-get install libpcap-dev

2. git clone https://github.com/dhalperi/lorcon-old.git

3. cd lorcon-old

4. ./configure

5. make

6. sudo make install

7. 另外,首次執行linux-80211n-csitool-supplementary下的injection需要make,那麼 執行

1) cd ~

2) cd linux-80211n-csitool-supplementary/injection

3) make

接收端操作

A電腦作為接收端,ctrl+alt+T開啟終端視窗,執行:

1. cd linux-80211n-csitool-supplementary/injection

 2. ./setup_monitor_csi.sh wlan0 13 HT20 //首先下載後需覆蓋原指令碼,引數wlan0是網絡卡名稱,可執行iwconfig命令檢視;13為2.4G頻段通道編號,如果只填了網絡卡名稱,通道編號和HT模式會使用預設值64+HT20(5G頻段)。

3. sudo /home/csi/linux-80211n-csitool-supplementary/netlink/log_to_file log.dat 

  //等待接收資料,這裡的csi是你的計算機名稱

注意:第二步裡,我修改了原版指令碼內容。因為之前在裝CSI Tool的時候改過驅動,所以指令碼有些內容是沒必要再執行的。另外,網上看到的指令碼,基本都是把網絡卡名稱寫死為wlan0(除了github上的lgtm專案),實際可能並不相符,這會導致執行不成功的情況。因此我把網絡卡名稱也作為了輸入引數。另外,沒有指令碼第二行stop network-manager的話,也是常常無法收數的。執行指令碼的三個引數分別是網絡卡名稱、通道編號、HT模式。

setup_monitor_csi.sh內容:

#!/usr/bin/sudo /bin/bash
service network-manager stop
SLEEP_TIME=2
WLAN_INTERFACE=$1
if [ "$#" -ne 3 ]; 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
while [ $? -ne 0 ]
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

執行截圖:

傳送端操作

B電腦/傳送端:

1. cd linux-80211n-csitool-supplementary/injection/

2. ./setup_inject.sh wlan0 13 HT20      //下載後需覆蓋原指令碼,wlan0為你的網絡卡名稱,13為通道編號

setup_inject.sh也是基於類似的理念修改的:新增執行說明;新增網絡卡名為引數;新增stop network-manager

再次宣告:該指令碼適配改過驅動的CSI tool

setup_inject.sh內容:

#!/usr/bin/sudo /bin/bash
service network-manager stop
WLAN_INTERFACE=$1
SLEEP_TIME=2
modprobe iwlwifi debug=0x40000
if [ "$#" -ne 3 ]; 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 ]
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
while [ $? -ne 0 ]
do
    ifconfig mon0 up
done
sleep $SLEEP_TIME
echo "Set channel $chn $bw....."
iw mon0 set channel $chn $bw



3. sudo echo 0x4101 | sudo tee /sys/kernel/debug/ieee80211/phy0/iwlwifi/iwldvm/debug/monitor_tx_rate //這一步可以寫成指令碼

0x4101這部分引數設定具體參見下圖,該圖引自CSI Tool安裝使用講解

比如0x1c101表示支援選擇三根天線傳送、OFDM下的HT20模式,不過Rate Selection部分對應速率尚不明。

4. sudo ./random_packets 100000 100 1  第一個引數:包的數量 第二個引數:包的長度 第三個引數:包與包間delay(微秒)。

可能出現問題 Error opening LORCON interface,這是因為沒有sudo執行。

執行截圖:

執行了上述所有操作後,我們可在接收端看到A電腦收到了資料,之後就可以解析了。