抓包實戰(zhàn):監(jiān)聽模式與Wireshark分析指南)
簡介一份針對802.11協(xié)議的無線局域網(wǎng)抓包實驗報告專為網(wǎng)絡(luò)工程、無線通信方向的學(xué)生及初學(xué)者設(shè)計用于理解無線局域網(wǎng)中的幀格式與抓包分析方法。實驗基于Ubuntu 10.04與Wireshark工具從環(huán)境搭建到抓包實操均有詳細(xì)記錄報告按照實驗?zāi)康?、環(huán)境配置、步驟、結(jié)果分析和總結(jié)的結(jié)構(gòu)展開重點解析了數(shù)據(jù)幀0x0a08表示幀控制、RTS控制幀0x00b4和Beacon管理幀0x0080的逐位含義涵蓋版本、類型、子類型、To DS/From DS、地址、校驗碼等關(guān)鍵字段并提醒了大端模式下的字節(jié)序讀取問題。資源為PDF格式壓縮包內(nèi)含1個文件共537KB輕量便于下載。目前已有400人學(xué)習(xí)適合作為無線網(wǎng)絡(luò)實驗課程報告或自學(xué)802.11協(xié)議的輔助材料可直接參考其分析思路與幀解讀方法。1. 無線局域網(wǎng)抓包的第一步是切換監(jiān)聽模式不是單看數(shù)據(jù)如果你只聽說過有線網(wǎng)卡插上就能抓包第一次做無線局域網(wǎng)抓包實驗時多半會悶住打開 Wireshark選好無線網(wǎng)卡點開始捕獲列表里只有自己瀏覽網(wǎng)頁產(chǎn)生的報文。這不是工具問題而是網(wǎng)卡驅(qū)動處于默認(rèn)接收模式只把目標(biāo)地址是本機的幀送給協(xié)議棧其余站點發(fā)在同個信道里的幀在驅(qū)動層就被丟掉了。無線局域網(wǎng)抓包的前提是把空口上所有幀都收進(jìn)來這一步通常叫打開監(jiān)聽模式軟件實現(xiàn)要么走 airmon-ng要么直接用 iw 把接口類型改成 monitor。硬件層面還要額外處理驅(qū)動、信道和監(jiān)管域三個變量任何一個不對抓包文件里就只剩自己的雜散報文。下面按實驗順序把網(wǎng)卡選型、airmon-ng 參數(shù)、Wireshark 分析命令逐一拆開并解釋哪些所謂的“抓不到包”其實是射頻參數(shù)設(shè)錯了。2. 無線局域網(wǎng)抓包必須理解 802.11 幀監(jiān)聽模式和三種幀類型普通以太網(wǎng)抓包時包結(jié)構(gòu)和地址語義比較固定抓包工具拿到幀頭就能解析 IP。無線局域網(wǎng)不一樣802.11 幀頭部設(shè)計要考慮射頻介質(zhì)、漫游和認(rèn)證因此比以太網(wǎng)頭多出不少字段。做無線局域網(wǎng)抓包實驗之前最好先分清連接模式與監(jiān)聽模式下的幀接收路徑再認(rèn)識空口中三種幀類型這樣后面看到“大量亂碼幀”才不會誤判。2.1 無線局域網(wǎng)抓包與有線抓包的兩個本質(zhì)差異第一個差異在半雙工射頻介質(zhì)。有線鏈路普遍是全雙工交換機端口和主機之間沒有共享沖突無線信道則是多站點共享的半雙工介質(zhì)同一時刻只能有一個終端占用信道。為了降低碰撞802.11 引入 CSMA/CA站點發(fā)送數(shù)據(jù)前先偵聽信道發(fā)送后還要等待接收方回應(yīng) ACK。抓包文件里因此會出現(xiàn)大量控制幀和重傳幀這些不是垃圾數(shù)據(jù)而是空口競爭的直接反映。同一個無線局域網(wǎng)抓包文件里重傳比例偏高往往說明附近有其他源干擾或信號邊界不定。第二個差異在地址字段。以太網(wǎng)幀只有源 MAC 和目的 MAC無線幀則包含接收地址RA、發(fā)送地址TA、BSSID 和可選通配地址等多個字段。也就是說幀里寫著的wlan.da并不總是網(wǎng)卡能看到的目標(biāo)驅(qū)動在上送報文時會按地址位做過濾。要看到其他終端的 Probe Request只改 Wireshark 的顯示過濾器沒用必須在網(wǎng)卡層關(guān)閉地址過濾這就是監(jiān)聽模式存在的根本原因。2.2 管理幀、控制幀和數(shù)據(jù)幀抓包文件里的三類幀無線局域網(wǎng)抓包實驗里最常用的分類方式是看 802.11 幀頭里的 type 字段。類型值為 0 的是管理幀用來完成發(fā)現(xiàn)、認(rèn)證、關(guān)聯(lián)類型值為 1 的是控制幀負(fù)責(zé)預(yù)約信道和確認(rèn)類型值為 2 的是數(shù)據(jù)幀真正承載 IP 載荷。幀類型type 字段值常見子類型在無線局域網(wǎng)抓包里的作用管理幀0Beacon(8)、Probe Request(4)、Association Request(0)觀察 AP 廣播、終端掃描、關(guān)聯(lián)過程控制幀1RTS(11)、CTS(12)、ACK(13)判斷信道競爭和重傳分析無線環(huán)境質(zhì)量數(shù)據(jù)幀2QoS Data(8)、Null(4)承載應(yīng)用層流量加密后需解密再分析管理幀最值得先看。Beacon 由 AP 周期性發(fā)送包含著 SSID、BSSID、信道和速率集Probe Request 是終端主動掃描時發(fā)出的里面帶終端支持的速率和廠商信息。無線局域網(wǎng)抓包實驗中常說的“找 AP、找隱藏 SSID”其實都是在這些管理幀里做過濾。控制幀的重點則不是容量而是重試和 CTS/RTS 的分配頻率這些信息用來判斷信道是否擁擠。2.3 用 iw 確認(rèn)網(wǎng)卡是否支持監(jiān)聽模式不少實驗卡在第一步網(wǎng)卡本身不支持 monitor 模式或者驅(qū)動沒把該能力暴露給上層。在 Linux 環(huán)境里可以先查看物理無線設(shè)備的能力再決定要不要進(jìn)入后面的 airmon-ng 流程。iw phy phy0 info | grep -A 8 Supported interface modes正常輸出里應(yīng)該能看到monitor這一行。如果沒有說明當(dāng)前驅(qū)動或固件不開放監(jiān)聽模式常見的處理方法是換網(wǎng)卡或換驅(qū)動模塊后面再折騰 Wireshark 也拿不到其他終端的幀。另外可以順手執(zhí)行iw dev記下當(dāng)前無線接口名比如 wlan0 或 wlp2s0后續(xù)切換監(jiān)聽模式和指定信道都會用到。3. 無線局域網(wǎng)抓包的監(jiān)聽模式配置網(wǎng)卡選型與 airmon-ng 常用參數(shù)明確了 802.11 幀結(jié)構(gòu)之后實驗進(jìn)入實操階段。這章解決三個實際問題用哪塊網(wǎng)卡做無線局域網(wǎng)抓包、airmon-ng 怎么把網(wǎng)卡切成監(jiān)聽模式、以及固定信道和頻寬時有哪些參數(shù)最容易設(shè)錯。3.1 實驗網(wǎng)卡怎么選先看監(jiān)聽模式支持再談頻段無線局域網(wǎng)抓包不像普通上網(wǎng)那樣“能連上就能抓”。判斷網(wǎng)卡是否適合實驗先看芯片方案是否開放 monitor 模式再看驅(qū)動在目標(biāo)內(nèi)核版本上是否容易編譯。筆記本內(nèi)置網(wǎng)卡不是不行但驅(qū)動和固件限制比較多USB 外置網(wǎng)卡在實驗環(huán)境里更可控拔到另一臺機器也能復(fù)現(xiàn)。芯片方案驅(qū)動加載方式常見問題和適用場景Realtek RTL8812AU編譯 dkms 模塊支持 2.4GHz/5GHz監(jiān)聽模式成熟但內(nèi)核升級后需要重新編譯MediaTek MT7612U內(nèi)核自帶 mt76驅(qū)動相對省事適合長時間連續(xù)抓包Intel AX210內(nèi)核自帶 iwlwifi內(nèi)置網(wǎng)卡常見支持 6GHz部分固件對管理幀上送不完整抓 Probe Request 時可能偏少表格里沒有絕對推薦實踐中優(yōu)先選驅(qū)動改動少的芯片。Intel AX210 這類內(nèi)置網(wǎng)卡在無線局域網(wǎng)抓包實驗里可先用iw list確認(rèn)能力抓包量大時如果發(fā)現(xiàn)管理幀數(shù)量偏低不要急于下結(jié)論換 USB 網(wǎng)卡對比一次更容易定位。3.2 airmon-ng 切換監(jiān)聽模式的順序和參數(shù)airmon-ng 來自 aircrack-ng 套件它的作用不是“讓網(wǎng)卡變得能抓包”而是把受管模式接口轉(zhuǎn)換為監(jiān)聽模式接口并繞開系統(tǒng)網(wǎng)絡(luò)管理服務(wù)的干擾。推薦順序是先 check再 kill最后 start。# 查看當(dāng)前無線接口名比如 wlan0 iw dev # 檢查并停掉可能搶占無線網(wǎng)卡的系統(tǒng)服務(wù) sudo airmon-ng check kill # 把 wlan0 切換到監(jiān)聽模式airmon-ng 會創(chuàng)建 wlan0mon sudo airmon-ng start wlan0 # 確認(rèn)監(jiān)聽模式生效并查看當(dāng)前綁定的物理層信息 sudo iw dev wlan0mon infoairmon-ng check kill后面那條命令會斷掉本機正在使用的無線網(wǎng)絡(luò)實驗機如果靠遠(yuǎn)程 SSH 連接先把執(zhí)行腳本退出或改用網(wǎng)線否則把網(wǎng)卡一停遠(yuǎn)程會話就斷開了。執(zhí)行完start后接口名通常從 wlan0 變?yōu)?wlan0mon名字不重要關(guān)鍵是iw dev wlan0mon info輸出里的type monitor。airmon-ng 子命令參數(shù)可以單獨列出一張表方便實驗記錄里抄寫。子命令參數(shù)作用無線局域網(wǎng)抓包實驗里的用法check列出會干擾抓包的進(jìn)程抓包前快速確認(rèn)check kill停止 NetworkManager 等接管程序網(wǎng)卡被系統(tǒng)自動重連時必用start wlan0把指定接口切成監(jiān)聽模式生成 wlan0mon 接口stop wlan0mon恢復(fù)受管模式實驗結(jié)束后恢復(fù)上網(wǎng)如果airmon-ng start wlan0報錯說接口忙還可以先用sudo ip link set wlan0 down把接口停掉再執(zhí)行 start。多數(shù)場景下這個順序比直接硬切更省事。3.3 固定信道、頻寬和監(jiān)管域抓包前最容易被忽略的三步監(jiān)聽模式打開后網(wǎng)卡默認(rèn)可能還在一個信道上自動掃描也可能被系統(tǒng)設(shè)置到某個不固定的頻段。要抓某個 AP必須把網(wǎng)卡固定在 AP 所在的信道上。常見做法是用 iw 直接指定信道和帶寬# 2.4GHz 固定到 6 信道20MHz 帶寬 sudo iw dev wlan0mon set channel 6 HT20 # 5GHz 固定到 36 信道中心頻率 5180 MHz sudo iw dev wlan0mon set freq 5180 20參數(shù)里的 HT20 表示 20MHz 帶寬。無線局域網(wǎng)抓包實驗的初期階段盡量用 20MHz不要為了“抓得多”直接上 40MHz 或 80MHz。帶寬越寬網(wǎng)卡需要同時監(jiān)聽的中心頻點越多射頻前端在邊界頻段上的空口接收能力越差反而容易出現(xiàn)漏幀。想抓 5GHz 時記得先查 AP 用的主信道頻率不同信道號和中心頻率的換算關(guān)系容易出錯最簡單的方法是先用airodump-ng wlan0mon看一遍周圍 AP 所在信道再固定到目標(biāo)信道。監(jiān)管域?qū)π诺揽捎眯缘挠绊懸埠艽蟆D承?qū)動的固件會參考內(nèi)核的無線監(jiān)管域信息決定哪些頻段允許監(jiān)聽。如果實驗機上設(shè)置了非目標(biāo)地區(qū)代碼網(wǎng)卡可能在工作在某些頻段時自動拒絕收包??梢杂胕w reg get查看當(dāng)前監(jiān)管域?qū)嶒灜h(huán)境下合理做法是設(shè)置為符合實驗所在地的代碼避免在受限制的信道上白耗時間。4. 無線局域網(wǎng)抓包分析與 Wireshark 過濾器從落盤到 802.1X 握手監(jiān)聽模式配置好之后無線網(wǎng)卡已經(jīng)能收到同信道里的各種 802.11 幀但抓包文件還不會自動變成有用信息。實際做無線局域網(wǎng)抓包實驗時要么用 tshark 命令行落盤要么用 Wireshark 圖形界面實時看。兩者使用同樣的抓包引擎區(qū)別主要在交互方式和過濾階段。4.1 用 tshark 把無線局域網(wǎng)抓包保存成 pcapng 文件長時抓包或無人值守場景下圖形界面不是最佳選擇。tshark 可以指定接口、抓包時長和輸出文件并在文件達(dá)到條件后自動結(jié)束適合放到后臺跑。最小命令如下# 在 wlan0mon 上抓 120 秒保存為 pcapng 文件 sudo tshark -i wlan0mon -a duration:120 -w wifi_lab.pcapng-i指定監(jiān)聽接口-a duration:120表示自動停止條件為抓包持續(xù) 120 秒-w指定輸出文件。tshark 會根據(jù)文件后綴自動選擇 pcapng 格式。如果不想限制時間只想抓某個數(shù)量就停止把-a duration:120換成-c 5000代表抓到 5000 個包后結(jié)束。抓包過程中終端會滾動打印實時摘要不想看可以不接任何顯示參數(shù)。文件落盤后直接關(guān)掉終端也沒關(guān)系pcapng 已經(jīng)寫到磁盤。需要注意的是tshark 和 Wireshark 的顯示過濾器語法一致但命令行里的-Y過濾發(fā)生在寫入文件之后-f捕獲過濾器發(fā)生在驅(qū)動抓包階段。無線局域網(wǎng)抓包實驗里默認(rèn)先把所有幀落盤再慢慢過濾避免捕獲過濾把關(guān)鍵幀提前濾掉。4.2 用 Wireshark 顯示過濾器看 Beacon、Probe Request 和隱藏 SSID打開 pcapng 后先不要直接看 IP 層新建一個顯示過濾器欄按 802.11 類型分組。下面這張表是無線局域網(wǎng)抓包分析里最常用的一組過濾表達(dá)式目標(biāo)內(nèi)容顯示過濾器所有管理幀wlan.fc.type 0所有 Beacon 幀wlan.fc.type_subtype 8所有 Probe Requestwlan.fc.type_subtype 4所有 Probe Responsewlan.fc.type_subtype 5802.1X 認(rèn)證相關(guān)幀eapol || eap先輸入wlan.fc.type_subtype 8能看到網(wǎng)絡(luò)的 SSID 列表。雙擊任一 Beacon展開幀頭部里的 Tagged Parameters能看到 SSID、Supported Rates、HT Capabilities 等字段。做無線局域網(wǎng)抓包實驗時最常驗證的隱藏 SSID 判斷方法也在這里隱藏 SSID 的 AP 發(fā)出的 Beacon 中SSID 字段長度為 0但 Probe Response 里通常還是會攜帶真實 SSID。用wlan.fc.type_subtype 5過濾出 Probe Response能直接看到 AP 在回應(yīng)主動掃描時是否暴露了網(wǎng)絡(luò)名。4.3 在無線局域網(wǎng)抓包文件里拆解 802.1X 認(rèn)證流程企業(yè)級 WPA2/WPA3 網(wǎng)絡(luò)的無線局域網(wǎng)抓包實驗一般要走到 802.1X 認(rèn)證流程。這個流程和家庭網(wǎng)絡(luò)最大的區(qū)別是終端關(guān)聯(lián)成功后并不會馬上獲得 IP而是先跑 EAPOL 報文交換。抓包時先過濾出eapol || eap按 frame.number 排序能看到認(rèn)證順序。# 從保存的文件里篩選 802.1X 幀輸出幀號和 EAPOL 類型 tshark -r wifi_lab.pcapng -Y eapol || eap \ -T fields -e frame.number -e wlan.sa -e eapol.type輸出里eapol.type值需要對照 802.1X 定義理解類型 0 表示 EAP-Packet攜帶認(rèn)證方法類型 1 是 EAPOL-Start類型 3 是 EAPOL-Key用于四次握手。實驗時最常見的故障是抓包文件里只有 EAPOL-Start 和 EAPOL 響應(yīng)卻沒有后續(xù)的 EAPOL-Key這說明認(rèn)證過程在 RADIUS 側(cè)或 AP 側(cè)中斷。判斷這種問題不能用普通數(shù)據(jù)幀過濾器必須回到無線局域網(wǎng)抓包的 eapol 過濾條件上。5. 無線局域網(wǎng)抓包排查與長時抓包三個先做的事到最后這個環(huán)節(jié)重點不是繼續(xù)堆命令而是把常見失敗現(xiàn)象和對應(yīng)檢查點講清楚。無線局域網(wǎng)抓包失敗的表面原因很多但 90% 的實驗?zāi)芡ㄟ^三個動作找回正確方向。5.1 抓不到任何幀時先查信道、驅(qū)動和 NetworkManager如果監(jiān)聽接口已經(jīng)啟動周圍明明有 AP但抓包文件里幾乎空白先別懷疑硬件。第一步看iw dev wlan0mon info里的 channel確認(rèn)網(wǎng)卡還停留在自動掃描狀態(tài)自動掃描時網(wǎng)卡會在多個信道間跳動每個信道停留時間極短表現(xiàn)為“能抓到零散 Beacon但連著抓不到同一組報文”。第二步看驅(qū)動日志輸入dmesg | tail -30如果出現(xiàn)固件報錯或monitor mode is not supported之類的信息說明問題在驅(qū)動層面。第三步檢查 NetworkManager 有沒有把接口重新接管airmon-ng check kill之后如果網(wǎng)絡(luò)服務(wù)被自動拉起網(wǎng)卡會被重置回受管模式。以上三個位置都沒問題再回到天線位置和發(fā)射功率上找原因。5.2 管理幀多而數(shù)據(jù)幀少先看重傳和終端省電無線局域網(wǎng)抓包實驗進(jìn)行到分析階段常見困惑是“抓了一大堆 Beacon但看不到目標(biāo)終端的數(shù)據(jù)流量”。這種情況下要分兩步看。先過濾wlan.fc.type 2看數(shù)據(jù)幀總數(shù)量再過濾wlan.fc.retry 1看重傳比例。如果重傳很低而終端長時間不出現(xiàn)在數(shù)據(jù)幀里多半是終端處于省電模式或漫游到了其他信道。省電模式下終端會定期醒來接收 AP 緩存的數(shù)據(jù)而不是持續(xù)占用信道抓包時間不夠長就容易以為沒抓到。把抓包時長拉長到 5 分鐘以上并在實驗環(huán)境里主動制造流量比如從終端 ping 網(wǎng)關(guān)會讓數(shù)據(jù)幀明顯變多。5.3 長時抓包的循環(huán)保存與 capinfos 檢查長時間連續(xù)做無線局域網(wǎng)抓包時單個 pcapng 文件會越來越大Wireshark 打開也會變慢。常見做法是讓 tshark 自動分片保留最近幾個文件即可# 單文件 50MB最多保留 10 個文件 sudo tshark -i wlan0mon -b filesize:50000 -b files:10 -w long_run.pcapng # 抓包結(jié)束后查看總包數(shù)和持續(xù)時長 capinfos long_run.pcapng 2/dev/null | grep -E Number of packets|Capture duration-b filesize:50000的單位是 KB也就是 50MB-b files:10讓 tshark 在寫滿 10 個文件后循環(huán)覆蓋最舊文件。capinfos 是 Wireshark 自帶的文件信息工具用來核對抓包文件的包總數(shù)和捕獲時長。無線局域網(wǎng)抓包實驗的記錄里建議把信道、頻寬、包數(shù)和持續(xù)時間一起寫入實驗報告這樣即使后來發(fā)現(xiàn)分析有問題也能快速還原現(xiàn)場條件。把上面這兩條命令存成一個小腳本下次實驗直接復(fù)用出錯率會低很多。本文還有配套的精品資源點擊獲取