當(dāng)你拿到一臺(tái)linux電腦,你可以把它配置成Wi-Fi抓包器,用以捕獲空中Wi-Fi包,為網(wǎng)絡(luò)問題分析提供依據(jù)。
一.無線網(wǎng)卡的監(jiān)聽模式
默認(rèn)情況下,無線網(wǎng)卡和無線接入點(diǎn)(Wireless Access Point,WAP)建立連接后,就處于托管模式(Managed mode),在托管模式下,無線網(wǎng)卡只專注于接收從 WAP發(fā)給自己的數(shù)據(jù)報(bào)文。如果想讓無線網(wǎng)卡監(jiān)聽所有的空中無線包,需要將無線網(wǎng)卡設(shè)置成監(jiān)聽模式(Monitor mode,也叫 RFMON 模式),然后再使用Wireshark 等軟件對(duì)捕獲的數(shù)據(jù)報(bào)文進(jìn)行分析。 無線網(wǎng)卡除了 Managed mode 和 Monitor mode 這兩種模式之外,還支持其他模式,如:Ad hoc(也叫IBSS模式)和Master mode, Linux Wireless 站點(diǎn)上對(duì)此有詳細(xì)的介紹。
二.linux系統(tǒng)的網(wǎng)卡信息
為了將無線網(wǎng)卡設(shè)置成監(jiān)聽模式,我們需要先獲取網(wǎng)卡驅(qū)動(dòng)信息并設(shè)置網(wǎng)卡。
確保無線網(wǎng)卡正常工作。若Linux電腦能正常通過無線網(wǎng)絡(luò)上網(wǎng)則無線網(wǎng)卡驅(qū)動(dòng)正常。否則需要:
?a. 確定無線網(wǎng)卡型號(hào)
~$ lsusb
b.安裝驅(qū)動(dòng)
linux無線網(wǎng)卡驅(qū)動(dòng)的安裝可以參考這里。
確定網(wǎng)卡是否支持Monitor Mode,查看自身網(wǎng)卡驅(qū)動(dòng)命令:
? ~$ sudo lshw -c network
-network description: Wireless interface ... logical name: wlp0s20f3 ... configuration: broadcast=yes driver=iwlwifi driverversion=6.2.0-34-generic firmware=72.daa05125.0 QuZ- a0-hr-b0-72.u ip=172.20.2.187 latency=0 link=yes multicast=yes wireless=IEEE 802.11 resources: iomemory:600-5ff irq:16 memory:6055294000- 6055297fff
通過查閱Linux Wireless 論壇,我們可以得知:網(wǎng)卡驅(qū)動(dòng)iwlwifi支持monitor mode,即監(jiān)聽模式。
Driver | Manufacturer | cfg80211 | AP | IBSS | mesh | monitor | PHY modes |
---|---|---|---|---|---|---|---|
adm8211 | ADMtek/Infineon | yes | no | no | no | ? | B |
iwlegacy | Intel | yes | no | yes | no | no | A/B/G |
iwlwifi | Intel | yes | yes (6) | yes | no | yes | A/B/G/N/AC |
ath12k | Qualcomm Atheros | yes | yes | no | yes (6) | yes (6) | A/B/G/N/AC/AX/BE |
三.Linux系統(tǒng)無線網(wǎng)卡的配置
3.1 使用iwconfig查看無線網(wǎng)卡狀態(tài)
1. Linux系統(tǒng)可以使用iwconfig工具查看當(dāng)前網(wǎng)卡狀態(tài):
~$ iwconfig
lo no wireless extensions. gpd0 no wireless extensions. wlp0s20f3 IEEE 802.11 ESSID:"@Hyatt_WiFi" Mode:Managed Frequency:5.805 GHz Access Point: 8C:7A:15:2E:56:4C Bit Rate=360 Mb/s Tx-Power=22 dBm Retry short limit:7 RTS thr:off Fragment thr:off Power Management:on Link Quality=51/70 Signal level=-59 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:2 Invalid misc:0 Missed beacon:0
可以看出無線網(wǎng)卡名稱為:wlp0s20f3 ;當(dāng)前處于托管模式(Managed Mode)。
2. 使用iwconfig 將網(wǎng)絡(luò)配置為Monitor Mode時(shí)參考命令序列(optional):
?$ su ? $ ifconfig your_driver_name down //將無線網(wǎng)卡 your_driver_name 停用 ? $ ifconfig your_driver_name down //將無線網(wǎng)卡 your_driver_name 停用 ? $ iwconfig your_driver_name mode monitor //設(shè)置 your_driver_name 的模式為monitor mode ? $ ifconfig your_driver_name up //啟用無線網(wǎng)卡 ? $ iwconfig your_driver_name channel 3 //可選項(xiàng),設(shè)置channel ? $ iwconfig //重新檢查網(wǎng)卡狀態(tài)
為什么使用iwconfig將無線網(wǎng)卡設(shè)置成監(jiān)聽模式后,過幾秒又會(huì)自動(dòng)變成托管模式?大多數(shù)情況下歸咎于Network Manager服務(wù)。如果無線網(wǎng)卡已經(jīng)連接了 AP,則Network Manager會(huì)檢測(cè)無線通常將無線網(wǎng)卡設(shè)置成監(jiān)聽模式后,即可以使用如 Wireshark 之類的抓包工具截取無線網(wǎng)絡(luò)報(bào)文了。但是由于抓包時(shí)網(wǎng)卡是處于監(jiān)聽模式的,這時(shí)不能通過Wi-Fi連接互聯(lián)網(wǎng),否則網(wǎng)卡會(huì)自動(dòng)切換回托管模式。為了避免自動(dòng)切換,我們可以使用airmon-ng工具配置Managed Mode。所以用戶可以嘗試斷開無線連接,或者使用“service network-manager stop”停止Network Manager服務(wù) 。
考慮到停止Network Manager可能造成其他網(wǎng)絡(luò)服務(wù)問題,我們不推薦直接使用iwconfig設(shè)置網(wǎng)絡(luò)的Monitor Mode。
3.2 使用airmon-ng監(jiān)聽無線網(wǎng)絡(luò)
通常將無線網(wǎng)卡設(shè)置成監(jiān)聽模式后,就可以使用如 Wireshark 之類的抓包工具抓取無線網(wǎng)絡(luò)空中報(bào)文了。但是由于抓包時(shí)網(wǎng)卡是處于監(jiān)聽模式的,此時(shí)不能通過Wi-Fi連接互聯(lián)網(wǎng),否則網(wǎng)卡會(huì)自動(dòng)切換回托管模式。為了避免自動(dòng)切換,我們可以使用airmon-ng工具 。
安裝抓包需要使用的工具
~$ sudo apt install -y wireshark net-tools wireless-tools aircrack-ng
~$ sudo airmon-ng //查看當(dāng)前網(wǎng)卡及驅(qū)動(dòng)狀態(tài)`
PHY Interface Driver Chipset phy0 wlp0s20f3 iwlwifi 14.3 Network controller: Intel Corporation Wi-Fi 6 AX201 (rev 20)
根據(jù)列出的當(dāng)前系統(tǒng)所使用的無線網(wǎng)卡類型,以及安裝的驅(qū)動(dòng)程序,使用airmon-ng相關(guān)命令將網(wǎng)卡設(shè)置成監(jiān)聽模式
~$ sudo airmon-ng start wlp0s20f3
Found 4 processes that could cause trouble.Kill them using airmon-ng check kill' before putting the card in monitor mode, they will interfere by changing channels and sometimes putting the interface back in managed mode PID Name 820 avahi-daemon 825 NetworkManager 856 wpa_supplicant 860 avahi-daemon PHY Interface Driver Chipset phy0 wlp0s20f3 iwlwifi 14.3 Network controller: Intel Corporation Wi-Fi 6 AX201 (rev 20) (mac80211 monitor mode vif enabled for [phy0]wlp0s20f3 on [phy0]wlp0s20f3mon) (mac80211 station mode vif disabled for [phy0]wlp0s20f3)
查看Monitor Mode是否設(shè)置成功
~$ sudo airmon-ng
PHY Interface Driver Chipset phy0 wlp0s20f3mon iwlwifi 14.3 Network controller: Intel Corporation Wi-Fi 6 AX201 (rev 20)
設(shè)置抓包頻帶(channel)和帶寬
~$ sudo iw dev wlp0s20f3mon set channel 10 HT20
抓包
~$ sudo wireshark
抓包結(jié)束,返回托管模式(Managed Mode)
~$ sudo airmon-ng stop wlp0s20f3mon
3.3 使用iw監(jiān)聽無線網(wǎng)絡(luò)
隨著Wi-Fi技術(shù)的發(fā)展進(jìn)步,cfg80211和nl80211作為一種新的無線驅(qū)動(dòng)框架用于無線程序的開發(fā)。而cfg80211不使用ioctl系統(tǒng)調(diào)用,而是使用Netlink(基于socket通信)。iw就是完全基于cfg80211框架重新設(shè)計(jì)并開發(fā)的網(wǎng)絡(luò)配置工具
使用iw查看網(wǎng)卡信息以及支持的頻帶和帶寬:
~$ iw list
列出本地的無線設(shè)備,以及每個(gè)無線設(shè)備的詳細(xì)信息
~$ iw dev
phy#0 Unnamed/non-netdev interface wdev 0x5 addr 7c:21:4a:21:c3:57 type P2P-device txpower 0.00 dBm Interface wlp0s20f3 ifindex 5 wdev 0x4 addr 7c:21:4a:21:c3:58 ssid Nordicsh-5G type managed channel 44 (5220 MHz), width: 160 MHz, center1: 5250 MHz txpower 22.00 dBm multicast TXQ: qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets 0 0 0 0 0
查看指定網(wǎng)卡設(shè)備信息
~$ iw dev wlp0s20f3 info
將網(wǎng)卡設(shè)置為監(jiān)聽模式: ? ~$ sudo iw dev wlp0s20f3 interface add mon0 type monitor 或者 ~$ sudo iw phy phy0 interface add mon0 type monitor
使能虛擬網(wǎng)卡:
~$ sudo ifconfig mon0 up
上述兩條命令新增了一個(gè)虛擬網(wǎng)卡接口mon0,并將mon0設(shè)置為監(jiān)聽模式。這個(gè)命令和3.2的airmon-ng的效果相同,wlp0s20f3仍然保持 managed模式不變,新增的mon0運(yùn)行在Monitor模式下。虛擬接口新增之后需要使用ifconfig up啟用 設(shè)置成功后可以用“iw dev”或者“iwconfig”查看無線網(wǎng)卡信息,可發(fā)現(xiàn)多了Interface mon0的網(wǎng)卡設(shè)備
設(shè)置虛擬網(wǎng)卡工作的頻帶(channel)和帶寬
~$ sudo iwconfig mon0 set channel 3 HT20
注意,設(shè)置mon0為monitor之后直接設(shè)置channel可能會(huì)報(bào)錯(cuò):Error for wireless request “Set Frequency” (8B04) : SET failed on device mon0 ; Device or resource busy. 此時(shí)需要?jiǎng)h除managed mode 網(wǎng)卡(刪除該網(wǎng)卡后暫時(shí)無法上網(wǎng)):
? ~$ sudo iw dev wlp0s20f3 del (然后重新設(shè)置網(wǎng)卡頻段)
抓包:
~$ sudo wireshark
抓包完后返回托管模式:
~$ sudo iw phy phy0 interface add wlp0s20f3 type managed
~$ sudo iw dev mon0 del
檢查網(wǎng)卡狀態(tài):
~$ iw dev (或者 ~$ iwconfig)
四.使用wireshark抓包
4.1 通過wireshark抓包必須的配置
安裝必要工具。
~$ sudo apt install -y wireshark net-tools wireless-tools aircrack-ng
為實(shí)現(xiàn)抓包,我們將網(wǎng)卡設(shè)置為監(jiān)聽模式并使能虛擬網(wǎng)卡后;需要啟用wireshark: (~$ sudo wireshark), 由于wireshark中不能顯式地設(shè)置抓包的頻帶(channel)和帶寬,我們需要后臺(tái)設(shè)置頻帶(channel)和帶寬
~$ sudo iw dev wlp0s20f3mon set channel 149 80MHz
如果只是動(dòng)態(tài)地修改頻帶(channel),也可簡(jiǎn)化為:
~$ sudo iwconfig mon0 channel 140
如何獲取所需監(jiān)聽AP的通信頻帶(channel)?
通過查看路由器配置
通過wifi Shell sample的 wifi scan 命令獲取 ?
通過sudo iwlist your_driver_name scan | egrep "Cell|ESSID|Channel" 命令獲取,注意網(wǎng)卡需處于托管模式(Managed Mode),例如:
~$ sudo iwlist wlp0s20f3 scan | egrep "Cell|ESSID|Channel"
Cell 01 - Address: 94:98:69:51:A9:47 Channel:153 ESSID:"CMCC-6XyY-5G" Cell 02 - Address: 96:BE:09:91:9C:E2 Channel:161 ESSID:"" Cell 04 - Address: 04:AB:08:A0:F6:16 Channel:1 Frequency:2.412 GHz (Channel 1) ESSID:"CMCC-MF9H"
4.2 頻帶和帶寬說明(optional)
動(dòng)態(tài)設(shè)置頻帶和帶寬:
~$ iw dev wlp0s20f3mon set channel 3 HT20
Wi-Fi 頻段頻率與channel存在對(duì)應(yīng)關(guān)系,把頻率劃分成很多寬度相等的子頻段(頻帶)就是信道Channel,每個(gè)信道的頻率寬度稱為帶寬。同版本的Wi-Fi協(xié)議,其無線電載波可以工作在不同的頻率范圍如2.4GHz和5GHz頻段內(nèi)。
固定頻率的波是無法承載信息的,只有能切換頻率的波才能承載信息,無線信號(hào)通訊必須工作在一定頻段內(nèi)而非某個(gè)頻率點(diǎn)。
對(duì)2.4 GHz (802.11 b/g/n)頻率進(jìn)行頻段分配,一共可以有14個(gè)信道(頻帶)。
如果每個(gè)信道的帶寬是22MHz,那么2.4G最多只能同時(shí)使用三個(gè)互不重疊的信道(1,6和11)。其中信道14在全球大多數(shù)國(guó)家都不允許使用。
?如果信道帶寬是20MHz,那么最多可以同時(shí)使用四個(gè)信道(1,5,9,13)。2.4G頻道帶寬典型值說明:
# NoHT : 不使用802.11n,基本很少用 # HT20 : 802.11n/ac/ax 20Mhz頻寬 # HT40+ : 802.11n/ac/ax 雙20Mhz,控制信道比擴(kuò)展信道頻率高 # HT40- : 802.11n/ac/ax 雙20Mhz,控制信道比擴(kuò)展信道頻率低

2.4G頻段分布圖
對(duì)于5GHz頻段,信道從5.000GHz(信道0)開始編碼,每5MHz一個(gè)信道。各國(guó)開放頻率范圍有所不同,如EN301 893規(guī)范是從 5.150GHz開始的。通常實(shí)際允許使用的信道是從36開始的,頻寬20MHz,可用信道每次+4,如36,40,44,48 … 64 。 查閱每個(gè)國(guó)家可用的信道可參考:無線局域網(wǎng)信道列表 - 維基百科,自由的百科全書 (wikipedia.org)
監(jiān)聽模式下查看網(wǎng)卡支持的頻帶和帶寬信息:
~$ iw wlp0s20f3mon info
4.3 實(shí)時(shí)跳頻(optional)
?信道×帶寬的排列組合選項(xiàng)太多,普通用戶并不知道哪些組合是合法的,以及自己的網(wǎng)卡是否支持這些組合。我們用2個(gè)腳本來自動(dòng)完成一些工作。
配置識(shí)別腳本test-channels.sh:自動(dòng)識(shí)別出當(dāng)前網(wǎng)卡哪些信道+帶寬的排列組合是合法的,并記錄下來;
自動(dòng)跳頻腳本:在前一個(gè)腳本的范圍內(nèi),無限循環(huán)跳頻掃描: channel-hopping.sh
注意:需要將腳本里網(wǎng)卡接口改為自身監(jiān)聽網(wǎng)絡(luò)所使用的網(wǎng)卡,如:DEFAULT_INTERFACE="wlp0s20f3mon";
使能執(zhí)行權(quán)限chmod +x ./test-channels.sh;chmod +x channel-hopping.sh執(zhí)行權(quán)限;并用sudo執(zhí)行。
1.test-channels.sh
此腳本列舉出了5G、2.4G頻段下,各個(gè)帶寬下支持的掃描信道,執(zhí)行結(jié)果如: ?
~$ chmod +x ./test-channels.sh ?
~$ sudo ./test-channels.sh
=================================================== 2.4G: Width:HT20, Valid Channels:1 2 3 4 5 6 7 8 9 10 11 12 13 Width:HT40+, Valid Channels:1 2 3 4 5 6 7 8 9 Width:HT40-, Valid Channels:5 6 7 8 9 10 11 12 13 Width:80MHz, Valid Channels: Width:160MHz, Valid Channels: 5G: Width:HT20, Valid Channels:36 40 44 48 52 56 60 64 100 104 108 112 116 120 124 128 132 136 140 144 149 153 157 161 165 Width:HT40+, Valid Channels:36 44 52 60 100 108 116 124 132 140 149 157
2.channel-hopping.sh
自動(dòng)跳頻的腳本內(nèi)記錄了每種帶寬下,網(wǎng)卡可以支持的信道。這些數(shù)據(jù)來源是前一個(gè)腳本的輸出結(jié)果此時(shí)需要設(shè)置抓包頻段和帶寬:
?~$ chmod +x channel-hopping.sh ?
~$ sudo ./channel-hopping.sh HT20
執(zhí)行腳本時(shí),指定要使用的帶寬,腳本將會(huì)每0.5s切換一次信道。腳本只會(huì)循環(huán)執(zhí)行一次,之后你可以手動(dòng)指定信道和帶寬。
4.4 過濾器
抓包時(shí),可以在wireshark中設(shè)置過濾器來選取自己設(shè)備的包。根據(jù)MAC地址過濾的語法如下:
Source Address: wlan.sa==XX:XX:XX:XX:XX:XX
Destination Address: wlan.da==XX:XX:XX:XX:XX:XX
Receiver Address: wlan.ra==XX:XX:XX:XX:XX:XX
Transmitter Address: wlan.ta==XX:XX:XX:XX:XX:XX
五.小結(jié)
5.1 使用airmon-ng+wireshark抓包
sudo apt install -y wireshark net-tools wireless-tools aircrack-ng Iwconfig sudo iwlist wlp0s20f3 scan | egrep "Cell|ESSID|Channel" => wlp0s20f3 sudo airmon-ng start wlp0s20f3 //switch to monitor mode: iwconfig (optional) => wlp0s20f3mon sudo wireshark iw wlp0s20f3mon info #網(wǎng)卡名:wlp0s20f3mon 頻道:149 帶寬:可選的參數(shù)有 頻道:149 帶寬:可選的參數(shù)有 noHT : 不使用802.11n,基本很少用 HT20 : 802.11n/ac/ax 20mhz頻寬 HT40+ : 802.11n/ac/ax 雙20Mhz,控制信道比擴(kuò)展信道頻率高 HT40- : 802.11n/ac/ax 雙20Mhz,控制信道比擴(kuò)展信道頻率低 5MHz : 5MHz,基本很少用 10MHz : 10MHz,基本很少用 80MHz : 802.11ac/ax 160MHz: 802.11ac/ax sudo iw dev wlp0s20f3mon set channel 11 HT20 //when setting,not require to close wireshark sudo ./test-channels.sh //optional chmod +x channel-hopping.sh //optional sudo ./channel-hopping.sh HT20 //optional, if required:chmod +x channel-hopping.sh wlan.da==f4:ce:36:00:1d:52 or wlan.sa==f4:ce:36:00:1d:52 //in wireshark GUI sudo airmon-ng stop wlp0s20f3mon //close monitor mode.
5.2 使用iw+wireshark抓包
sudo apt install -y wireshark net-tools wireless-tools aircrack-ng sudo iw dev iwconfig =>wlp0s20f3 sudo iwlist wlp0s20f3 scan | egrep "Cell|ESSID|Channel" =>channel 3 sudo iw dev wlp0s20f3 interface add mon0 type monitor iwconfig sudo ifconfig mon0 up sudo iw dev wlp0s20f3 del sudo iwconfig mon0 channel 3 //or sudo iw dev mon0 set channel 3 HT20 sudo wireshark sudo ./test-channels.sh //optional, change wifi-driver to mon3 in the xxx.sh sudo ./channel-hopping.sh HT20 //optional sudo iw phy phy0 interface add wlp0s20f3 type managed sudo iw dev mon0 del iwconfig
注意:如果wireshark 因權(quán)限問題問題無法啟動(dòng),可執(zhí)行以下命令序列:
sudo apt-get install libcap2-bin wireshark
sudo chgrp nordic /usr/bin/dumpcap
sudo chmod 750 /usr/bin/dumpcap
sudo setcap cap_net_raw,cap_net_admin+eip /usr/bin/dumpcap
審核編輯 黃宇
-
Linux
+關(guān)注
關(guān)注
87文章
11456瀏覽量
212750 -
wi-fi
+關(guān)注
關(guān)注
14文章
2226瀏覽量
126432 -
Nordic
+關(guān)注
關(guān)注
9文章
199瀏覽量
47916
發(fā)布評(píng)論請(qǐng)先 登錄
Wi-Fi 定位服務(wù)
WiMAX與Wi-Fi的區(qū)別
Wi-Fi CERTIFIED?交流會(huì)的Wi-Fi?技術(shù)的性能提升到新的高度
【LinkIt 7687試用體驗(yàn)】NO.4 Wi-Fi功能初體驗(yàn)
AP和網(wǎng)絡(luò)運(yùn)行方式低功耗Wi-Fi
如何優(yōu)化低功耗Wi-Fi
Wi-Fi 6簡(jiǎn)介
3分鐘讀懂Wi-Fi 6于Wi-Fi 5的優(yōu)勢(shì)
什么是wi-fi認(rèn)證
什么是Wi-Fi6你期待Wi-Fi6嗎Wi-Fi 6的說明
Wi-Fi聯(lián)盟宣布正式啟動(dòng)Wi-Fi 6認(rèn)證計(jì)劃
Wi-Fi HaLow 和傳統(tǒng) Wi-Fi 的區(qū)別是什么
Wi-Fi HaLow和傳統(tǒng)Wi-Fi的區(qū)別
從Wi-Fi 4到Wi-Fi 7:網(wǎng)速飆升40倍的無線革命

評(píng)論