[原創]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 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電腦收到了資料,之後就可以解析了。