絡(luò)協(xié)議分析:從安裝配置到實戰(zhàn)排查的完整指南)
1. 從零開始為什么你需要Wireshark如果你在網(wǎng)絡(luò)運維、安全分析或者應(yīng)用開發(fā)的崗位上待過一陣子大概率聽說過甚至用過Wireshark。但很多人對它的印象可能還停留在“一個復(fù)雜的抓包工具”打開后面對滿屏密密麻麻、不斷滾動的數(shù)據(jù)包瞬間感到無從下手然后默默關(guān)掉。這太正常了我剛開始接觸時也一樣。但我想告訴你的是一旦你跨過那個最初的門檻Wireshark會成為你手中最強(qiáng)大、最值得信賴的“網(wǎng)絡(luò)透視鏡”。簡單來說Wireshark是一個網(wǎng)絡(luò)協(xié)議分析器。它能讓你看到網(wǎng)絡(luò)上流動的每一個比特和字節(jié)。這有什么用想象一下你開發(fā)的Web應(yīng)用在測試環(huán)境跑得好好的一上線用戶就反饋登錄緩慢。你檢查了服務(wù)器負(fù)載、數(shù)據(jù)庫索引、應(yīng)用日志一切正常。問題出在哪這時候Wireshark就能派上用場。你可以在客戶端或者服務(wù)器端抓取登錄過程的網(wǎng)絡(luò)流量親眼看到TCP三次握手是否順利、TLS/SSL加密協(xié)商是否耗時、HTTP請求是否被重定向、服務(wù)器響應(yīng)是否延遲。很多在應(yīng)用層日志里看不見的“暗病”在網(wǎng)絡(luò)流量里都無所遁形。再比如內(nèi)網(wǎng)里突然出現(xiàn)網(wǎng)絡(luò)廣播風(fēng)暴交換機(jī)端口燈狂閃業(yè)務(wù)系統(tǒng)卡頓。是ARP欺騙還是某個設(shè)備中了毒在瘋狂發(fā)包空口爭論不如抓包實證。通過Wireshark分析流量特征你可以快速定位異常流量的源頭和協(xié)議從而采取精準(zhǔn)的應(yīng)對措施。所以無論你是想排查棘手的網(wǎng)絡(luò)故障、分析應(yīng)用性能瓶頸、學(xué)習(xí)網(wǎng)絡(luò)協(xié)議如何在實際中運作還是進(jìn)行安全審計比如檢查是否存在明文傳輸?shù)拿艽aWireshark都是你的必修課。這篇內(nèi)容我會從一個多年使用者的角度帶你從安裝配置到核心功能詳解再到實戰(zhàn)案例分析手把手讓你把Wireshark用起來而不僅僅是“安裝”了它。2. 工欲善其事Wireshark的安裝與初始配置很多人覺得安裝軟件是小事但對于Wireshark這樣的底層工具正確的安裝和初始配置能避免后續(xù)很多權(quán)限問題和功能缺失。這里我會覆蓋Windows和Linux以CentOS為例兩種最常見環(huán)境并重點講解幾個關(guān)鍵的初始設(shè)置。2.1 Windows平臺安裝細(xì)節(jié)決定成敗從官網(wǎng)下載Windows安裝包是最直接的途徑。安裝過程有幾個選項需要留意安裝組件選擇默認(rèn)會安裝Wireshark主程序、USBPcap用于捕獲USB流量和Npcap。Npcap是重中之重它是Windows下的數(shù)據(jù)包捕獲驅(qū)動庫是Wireshark能抓到包的基礎(chǔ)。務(wù)必確保它被選中安裝。在安裝Npcap時安裝程序會提示幾個選項Install Npcap in WinPcap API-compatible Mode建議勾選。這提供了對舊版WinPcap的兼容性一些依賴WinPcap的老工具也能正常工作。Restrict Npcap driver‘s access to Administrators only建議勾選。這能提升一點安全性防止非管理員用戶濫用抓包功能。Support raw 802.11 traffic (and monitor mode) for wireless adapters如果你需要分析無線網(wǎng)絡(luò)Wi-Fi流量并希望捕獲所有周圍的無線數(shù)據(jù)包監(jiān)控模式需要勾選此選項。對于普通有線網(wǎng)絡(luò)分析可以不勾。安裝后首次運行安裝完成后不要直接以普通用戶身份雙擊打開。如果你直接打開很可能會發(fā)現(xiàn)網(wǎng)卡列表是空的或者抓不到包。這是因為捕獲網(wǎng)絡(luò)數(shù)據(jù)需要管理員權(quán)限。正確的做法是在開始菜單找到Wireshark右鍵選擇“以管理員身份運行”。這是Windows平臺下最重要的一個操作習(xí)慣。中文界面設(shè)置可選Wireshark安裝包自帶多國語言。啟動后點擊菜單欄Edit-Preferences-Appearance在Language下拉框中選擇Chinese重啟Wireshark即可變?yōu)橹形慕缑?。但我個人建議至少在學(xué)習(xí)階段使用英文界面。因為大量的技術(shù)文檔、社區(qū)討論和錯誤信息都是英文的使用英文界面有助于保持術(shù)語一致性方便日后排查問題。2.2 Linux平臺安裝源碼與包管理之爭在Linux上通常用包管理器安裝就夠了。例如在CentOS 7上sudo yum install wireshark wireshark-gnomewireshark-gnome提供了圖形界面。在Ubuntu/Debian上則是sudo apt-get install wireshark但有時你可能需要特定版本或者需要開啟某些編譯選項這時就需要源碼安裝。源碼安裝的通用步驟是安裝依賴sudo yum groupinstall Development Tools以及sudo yum install libpcap-devel qt5-qtbase-devel等。從官網(wǎng)下載源碼包如wireshark-3.2.0.tar.xz解壓。./configure檢查并配置編譯選項。這里你可以通過--enable-或--with-參數(shù)啟用特定協(xié)議解析器或功能。make編譯。sudo make install安裝。注意源碼安裝后二進(jìn)制文件通常位于/usr/local/bin。你需要確保普通用戶有權(quán)限捕獲數(shù)據(jù)包這通常通過將用戶加入wireshark組來實現(xiàn)sudo usermod -a -G wireshark 你的用戶名。然后注銷并重新登錄這個組權(quán)限才會生效。對于銀河麒麟等國產(chǎn)ARM系統(tǒng)的離線安裝思路是先在聯(lián)網(wǎng)的同類系統(tǒng)機(jī)器上使用包管理器如yum或apt下載Wireshark及其所有依賴的.rpm或.deb包然后拷貝到離線機(jī)器上進(jìn)行安裝。命令類似yum install --downloadonly --downloaddir./wireshark-offline wireshark。這個過程對依賴關(guān)系處理能力要求較高是最考驗?zāi)托牡囊画h(huán)。2.3 關(guān)鍵初始配置為高效分析鋪路安裝好之后先別急著抓包。調(diào)整幾個設(shè)置能讓你的分析體驗提升好幾個檔次。設(shè)置默認(rèn)捕獲接口如果你主要分析固定網(wǎng)卡比如公司的內(nèi)網(wǎng)網(wǎng)卡可以設(shè)置默認(rèn)項。Edit-Preferences-Capture。在Default capture interface中選擇你常用的網(wǎng)卡。這樣每次打開捕獲對話框時它會自動選中。配置顯示過濾器欄主界面頂部的“過濾器”欄分為“捕獲過濾器”和“顯示過濾器”。捕獲過濾器語法如host 192.168.1.1基于BPF在抓包前就過濾能減少資源占用。顯示過濾器語法如ip.addr 192.168.1.1更強(qiáng)大靈活在抓包后過濾顯示結(jié)果。初學(xué)者可以暫時專注顯示過濾器。你可以把常用的顯示過濾器如http、dns、tcp.port 443保存下來在過濾器欄輸入表達(dá)式點擊右側(cè)的書簽圖標(biāo)選擇Save this filter。調(diào)整時間顯示格式數(shù)據(jù)包列表的Time列默認(rèn)顯示的是相對于第一個包的秒數(shù)。我更喜歡把它改成Date and Time of Day這樣每個包都有絕對時間戳便于和系統(tǒng)日志等其他證據(jù)關(guān)聯(lián)。設(shè)置路徑View-Time Display Format-Date and Time of Day。3. 核心界面與抓包初體驗看懂你的第一屏數(shù)據(jù)啟動Wireshark并以管理員權(quán)限運行后你會看到主界面。我們從上到下從左到右拆解一下。3.1 主界面功能區(qū)詳解菜單欄和工具欄文件操作、開始/停止抓包、過濾器設(shè)置等核心功能入口。把鼠標(biāo)懸停在圖標(biāo)上會有提示。捕獲過濾器欄緊挨工具欄下方輸入BPF語法在抓包前過濾。例如tcp port 80只抓80端口的TCP流量。數(shù)據(jù)包列表面板這是最主要的區(qū)域以表格形式顯示捕獲到的每個數(shù)據(jù)包的核心信息包括序號、時間、源地址、目標(biāo)地址、協(xié)議、長度和信息概要。單擊選中任一數(shù)據(jù)包其詳細(xì)信息就會在下面兩個面板展開。數(shù)據(jù)包詳情面板以樹狀結(jié)構(gòu)逐層展開選中數(shù)據(jù)包的協(xié)議頭信息。這是學(xué)習(xí)網(wǎng)絡(luò)協(xié)議最直觀的地方。從最底層的幀物理層到以太網(wǎng)頭數(shù)據(jù)鏈路層、IP頭網(wǎng)絡(luò)層、TCP/UDP頭傳輸層再到HTTP、DNS等應(yīng)用層協(xié)議一目了然。數(shù)據(jù)包字節(jié)流面板以十六進(jìn)制和ASCII碼形式顯示該數(shù)據(jù)包的原始字節(jié)。當(dāng)你需要查看負(fù)載Payload中的原始數(shù)據(jù)或者手動分析協(xié)議時這個視圖至關(guān)重要。3.2 執(zhí)行你的第一次抓包選擇網(wǎng)卡點擊工具欄的“鯊魚鰭”圖標(biāo)開始捕獲或者點擊Capture-Options。你會看到一個列表顯示所有可用的網(wǎng)絡(luò)接口。后面有實時流量柱狀圖的那個通常就是你正在使用的活躍網(wǎng)卡。選中它。開始捕獲點擊Start。你會看到數(shù)據(jù)包列表開始飛速滾動。生成一些流量為了讓捕獲到的東西有意義你可以打開瀏覽器訪問一個網(wǎng)頁或者ping一個地址如ping www.baidu.com。停止捕獲點擊紅色的方形停止按鈕。現(xiàn)在流量靜止了你可以開始分析了。3.3 解讀你的第一個數(shù)據(jù)包在數(shù)據(jù)包列表里找到協(xié)議是HTTP或者TCP的包單擊它。我們以一次簡單的HTTP訪問為例在數(shù)據(jù)包詳情面板你會看到類似這樣的展開Frame: 物理幀的概要信息如捕獲時間、長度等。Ethernet II: 源和目的MAC地址。這決定了數(shù)據(jù)包在局域網(wǎng)內(nèi)下一跳給誰。Internet Protocol Version 4: 源和目的IP地址。這是網(wǎng)絡(luò)層尋址。Transmission Control Protocol: TCP協(xié)議信息。重點關(guān)注Src Port源端口通常是客戶端隨機(jī)高位端口和Dst Port目的端口HTTP是80HTTPS是443。還有Sequence number,Acknowledgment number它們用于TCP的可靠傳輸。Flags字段很重要[SYN],[ACK],[FIN]分別代表連接建立、確認(rèn)和連接終止。Hypertext Transfer Protocol: 應(yīng)用層HTTP協(xié)議詳情。如果是請求你會看到GET / HTTP/1.1以及Host,User-Agent等頭部信息。如果是響應(yīng)你會看到HTTP/1.1 200 OK和返回的內(nèi)容類型、長度等。在數(shù)據(jù)包字節(jié)流面板你可以看到選中協(xié)議部分在詳情面板點擊某一行字節(jié)流面板對應(yīng)區(qū)域會高亮的原始十六進(jìn)制數(shù)據(jù)。右邊是ASCII解碼如果是文本協(xié)議如HTTP你能直接看到可讀的請求頭和響應(yīng)體。實操心得剛開始不要試圖理解每一個包。先找一些“干凈”的會話比如一次完整的HTTP GET請求和響應(yīng)。使用顯示過濾器http過濾出所有HTTP包然后跟蹤一個TCP流右鍵數(shù)據(jù)包 -Follow-TCP StreamWireshark會把這個TCP連接的所有請求和響應(yīng)重組并以對話形式呈現(xiàn)這對理解應(yīng)用交互邏輯極其有幫助。4. 過濾的藝術(shù)從海量數(shù)據(jù)中精準(zhǔn)定位抓包容易但抓到的包往往成千上萬。過濾是Wireshark的核心技能不會過濾就等于不會用Wireshark。過濾分為兩種捕獲過濾器和顯示過濾器。4.1 捕獲過濾器抓包前的“篩子”捕獲過濾器使用伯克利包過濾BPF語法在數(shù)據(jù)包被拷貝到Wireshark之前就進(jìn)行過濾可以顯著減少系統(tǒng)負(fù)載和抓取文件的大小。它的語法相對簡單直接。按主機(jī)過濾host 192.168.1.100抓取所有與192.168.1.100相關(guān)的流量包括進(jìn)出按網(wǎng)絡(luò)過濾net 192.168.1.0/24抓取整個192.168.1.0網(wǎng)段的流量按端口過濾port 80抓取源或目的端口為80的流量tcp port 443抓取TCP且端口為443的流量排除流量not arp不抓ARP廣播包ARP包在局域網(wǎng)內(nèi)非常頻繁通常與分析目標(biāo)無關(guān)組合條件host 10.0.0.5 and port 5060抓取與主機(jī)10.0.0.5相關(guān)的SIP協(xié)議流量SIP常用5060端口注意事項捕獲過濾器是一把“雙刃劍”。如果你過濾條件太嚴(yán)格可能會漏掉關(guān)鍵數(shù)據(jù)包比如三次握手的SYN包可能因為過濾條件被丟棄導(dǎo)致你無法分析完整的TCP連接。在問題不明確時我建議初期使用較寬松的過濾器如not arp或者干脆不用先全量抓取一小段時間再用顯示過濾器分析。4.2 顯示過濾器分析時的“顯微鏡”顯示過濾器是Wireshark的精華功能無比強(qiáng)大。它使用Wireshark自有的語法在已捕獲的數(shù)據(jù)包中進(jìn)行篩選顯示。基本比較操作符等于,!不等于,、、、比較數(shù)值邏輯操作符and與,or或,not非常用過濾字段ip.addr 192.168.1.1IP地址等于包含源和目的ip.src 192.168.1.1源IP地址ip.dst 10.0.0.1目的IP地址tcp.port 8080TCP端口等于tcp.srcport 5000TCP源端口udp.dstport 53UDP目的端口DNShttp顯示所有HTTP協(xié)議包http.request.method GET顯示HTTP GET請求dns顯示所有DNS協(xié)議包dns.qry.name contains baidu顯示查詢域名包含“baidu”的DNS包tcp.flags.syn 1 and tcp.flags.ack 0顯示TCP SYN包用于查看新建連接一個高級技巧當(dāng)你右鍵點擊數(shù)據(jù)包詳情面板中的某個字段比如TCP的[SEQ/ACK analysis]下的Bytes in flight選擇Apply as Filter-SelectedWireshark會自動將該字段的過濾表達(dá)式填入過濾器欄。這是學(xué)習(xí)過濾語法最快的方式。4.3 過濾表達(dá)式實戰(zhàn)定位典型問題場景一分析某IP的所有流量過濾器ip.addr 192.168.1.100解讀快速聚焦于單一主機(jī)看它與誰通信用什么協(xié)議。場景二排查網(wǎng)頁加載慢只看HTTP/HTTPS相關(guān)過濾器http or tls或tcp.port 80 or tcp.port 443解讀過濾掉無關(guān)的廣播、ARP等流量專注于應(yīng)用層。場景三查找網(wǎng)絡(luò)中的DNS查詢問題過濾器dns and dns.flags.response 0只顯示DNS查詢請求過濾器dns and dns.flags.rcode ! 0顯示DNS響應(yīng)碼非0的包即出錯的響應(yīng)解讀前者看客戶端問了什么后者看DNS服務(wù)器是否回答了錯誤。場景四揪出異常重傳和重復(fù)ACK過濾器tcp.analysis.retransmission顯示重傳包過濾器tcp.analysis.duplicate_ack顯示重復(fù)ACK包解讀這兩個過濾器直接調(diào)用Wireshark內(nèi)置的專家分析系統(tǒng)。出現(xiàn)大量重傳和重復(fù)ACK通常意味著網(wǎng)絡(luò)擁塞、丟包或?qū)Χ颂幚砭徛切阅軉栴}的直接信號。5. 進(jìn)階分析技巧像偵探一樣解讀流量掌握了基本抓包和過濾你已經(jīng)能解決一半的問題。接下來我們學(xué)習(xí)如何更深入地分析讓數(shù)據(jù)“說話”。5.1 跟蹤TCP/UDP/HTTP流這是最常用的功能之一。在數(shù)據(jù)包列表右鍵點擊任何一個TCP、UDP或HTTP數(shù)據(jù)包選擇Follow-TCP Stream/UDP Stream/HTTP Stream。Wireshark會重組該會話的所有數(shù)據(jù)在一個新窗口中顯示完整的、可讀的對話內(nèi)容。對于HTTP你看到的是原始的請求和響應(yīng)報文對于TCP上的自定義協(xié)議你看到的是原始的字節(jié)流可能顯示為ASCII或十六進(jìn)制。這個視圖讓你脫離單個數(shù)據(jù)包的局限從“會話”的全局視角理解交互邏輯。窗口上方有一個顯示過濾器自動生成了只匹配該會話的過濾器如tcp.stream eq 0關(guān)閉窗口后主界面就只顯示這個會話的包非常方便。5.2 使用內(nèi)置的專家信息Wireshark內(nèi)置了一個“專家系統(tǒng)”能自動分析數(shù)據(jù)包識別出潛在的問題并分級Errors, Warnings, Notes。點擊底部狀態(tài)欄的彩色圓圈圖標(biāo)或Analyze-Expert Information打開。Errors紅色嚴(yán)重問題如協(xié)議格式錯誤、校驗和錯誤、連接被重置RST。Warnings黃色值得注意的問題如重復(fù)ACK、零窗口Zero window表示接收方緩沖區(qū)已滿、亂序報文。Notes青色一般性信息如TCP窗口更新、連接建立和關(guān)閉。在分析性能問題時我首先會看專家信息快速定位到重傳、零窗口等警告然后針對這些警告所在的TCP流進(jìn)行深入跟蹤。5.3 統(tǒng)計功能宏觀視野Statistics菜單下提供了強(qiáng)大的統(tǒng)計分析工具。Conversations會話統(tǒng)計查看所有端點IP或MAC之間的對話按流量大小、包數(shù)量排序??梢钥焖僬页鼍W(wǎng)絡(luò)中的“話癆”主機(jī)可能是正常服務(wù)器也可能是中毒主機(jī)在瘋狂發(fā)包。Protocol Hierarchy協(xié)議分層統(tǒng)計以樹狀形式展示各層協(xié)議的流量分布百分比。一眼就能看出網(wǎng)絡(luò)中哪種協(xié)議占主導(dǎo)比如HTTP占比過高或存在大量非業(yè)務(wù)UDP廣播。IO Graphs輸入輸出流量圖繪制流量隨時間變化的曲線圖。你可以添加多個過濾器用不同顏色的曲線對比不同流量例如將重傳包的過濾表達(dá)式tcp.analysis.retransmission作為一條曲線看其隨時間的變化是否與網(wǎng)絡(luò)卡頓時間點吻合。Flow Graph流圖生成一個可視化的序列圖展示主機(jī)之間數(shù)據(jù)包的往返時序。這對于理解復(fù)雜的多步交互如TCP握手、TLS協(xié)商、HTTP請求響應(yīng)非常直觀。5.4 解密HTTPS流量默認(rèn)情況下Wireshark抓到的HTTPSTLS/SSL流量是加密的你只能看到TCP包和TLS握手過程看不到里面的HTTP內(nèi)容。要解密需要拿到服務(wù)器的私鑰僅適用于你擁有或控制的服務(wù)器或者在客戶端配置環(huán)境變量導(dǎo)出TLS會話密鑰。方法一擁有服務(wù)器私鑰在Wireshark中進(jìn)入Edit-Preferences-Protocols-TLS。在(Pre)-Master-Secret log filename欄點擊Browse指定一個文件路徑如C:\sslkey.log。在服務(wù)器上配置環(huán)境變量以Nginx為例在啟動前設(shè)置export SSLKEYLOGFILE/path/to/sslkey.log然后重啟服務(wù)。用瀏覽器訪問該服務(wù)器產(chǎn)生的TLS密鑰會自動寫入該文件。Wireshark在抓包時會自動讀取該文件并解密對應(yīng)的HTTPS流量。方法二配置客戶端導(dǎo)出密鑰主要用于調(diào)試客戶端應(yīng)用。同樣在TLS設(shè)置中指定密鑰日志文件然后在客戶端程序如Chrome、Firefox或curl啟動時設(shè)置環(huán)境變量指向該文件。重要安全提示sslkey.log文件包含了加密會話的密鑰必須妥善保管僅在安全的調(diào)試環(huán)境中使用用后及時刪除。切勿泄露此文件。6. 實戰(zhàn)案例剖析用Wireshark解決真實問題理論說再多不如實戰(zhàn)一遍。下面我們通過幾個典型場景把前面的知識串聯(lián)起來。6.1 案例一網(wǎng)頁加載緩慢分析現(xiàn)象用戶訪問公司內(nèi)部Web系統(tǒng)首頁加載需要十幾秒。分析步驟在客戶端抓包在用戶電腦上啟動Wireshark管理員權(quán)限開始捕獲然后讓用戶重現(xiàn)訪問慢的問題。訪問完成后停止捕獲。初步過濾應(yīng)用過濾器http or tls or dns聚焦于Web訪問相關(guān)流量。查看專家信息打開Expert Information發(fā)現(xiàn)大量TCP Retransmission和TCP Dup ACK警告。定位問題流點擊專家信息中的重傳警告Wireshark會自動定位到對應(yīng)數(shù)據(jù)包。查看該包的IP地址發(fā)現(xiàn)是客戶端與一臺應(yīng)用服務(wù)器之間的通信。跟蹤TCP流右鍵該數(shù)據(jù)包Follow-TCP Stream。在流窗口中可以清晰看到TCP三次握手后客戶端發(fā)送HTTP GET請求但服務(wù)器的響應(yīng)數(shù)據(jù)包被多次重傳。在字節(jié)流面板查看發(fā)現(xiàn)每次重傳的序列號相同。分析原因結(jié)合IO圖將過濾條件設(shè)置為該服務(wù)器的IP觀察流量曲線。發(fā)現(xiàn)重傳集中在某個時間段。同時檢查該TCP流的詳情發(fā)現(xiàn)客戶端的TCP接收窗口Win在某些時刻變得非常小甚至為0零窗口這表示客戶端應(yīng)用瀏覽器處理不過來導(dǎo)致TCP流控生效服務(wù)器停止發(fā)送。結(jié)論問題可能不是網(wǎng)絡(luò)鏈路丟包而是客戶端主機(jī)在某一時刻可能是由于某個瀏覽器插件或本地安全軟件CPU或內(nèi)存資源緊張導(dǎo)致TCP接收緩沖區(qū)被填滿觸發(fā)了零窗口進(jìn)而引發(fā)服務(wù)器數(shù)據(jù)重傳。解決方案是檢查客戶端主機(jī)的資源使用情況或嘗試更換瀏覽器。6.2 案例二內(nèi)網(wǎng)ARP欺騙檢測現(xiàn)象內(nèi)網(wǎng)部分用戶間歇性斷網(wǎng)ping網(wǎng)關(guān)時通時斷。分析步驟在受影響網(wǎng)段抓包在核心交換機(jī)上做端口鏡像或?qū)惭b了Wireshark的筆記本接入該網(wǎng)段進(jìn)行捕獲。過濾ARP流量應(yīng)用顯示過濾器arp。分析ARP包觀察ARP響應(yīng)包Opcode: reply (2)。正常情況下一個IP地址應(yīng)該只對應(yīng)一個MAC地址。如果你發(fā)現(xiàn)同一個IP地址尤其是網(wǎng)關(guān)IP對應(yīng)了多個不同的MAC地址在頻繁發(fā)送ARP響應(yīng)這就是典型的ARP欺騙跡象。定位攻擊源查看這些異常ARP響應(yīng)包的源MAC地址在以太網(wǎng)頭部并在數(shù)據(jù)包列表或會話統(tǒng)計Statistics-Conversations切換到Ethernet標(biāo)簽中查找這個MAC地址還和哪些IP進(jìn)行了大量通信從而定位到具體的物理端口或主機(jī)。進(jìn)一步驗證可以針對可疑MAC地址進(jìn)行過濾看其是否在發(fā)送大量無意義的廣播包或其他異常流量。6.3 案例三自定義應(yīng)用協(xié)議調(diào)試現(xiàn)象自研的C/S架構(gòu)應(yīng)用客戶端上報數(shù)據(jù)失敗。分析步驟在客戶端和服務(wù)端同時抓包在問題發(fā)生的時間點同時在兩端進(jìn)行抓包。這有助于區(qū)分問題是出在發(fā)送端、網(wǎng)絡(luò)鏈路還是接收端。確定通信端口如果不知道端口可以先在客戶端用netstat -an命令找出連接到服務(wù)器IP的端口號。過濾對話在Wireshark中使用過濾器例如ip.addr 服務(wù)器IP and tcp.port 應(yīng)用端口。跟蹤TCP流找到失敗請求對應(yīng)的TCP流跟蹤它。查看客戶端發(fā)送的最后一個數(shù)據(jù)包是什么服務(wù)器是否有響應(yīng)。如果服務(wù)器有響應(yīng)但客戶端沒收到可能是網(wǎng)絡(luò)問題如果服務(wù)器收到了請求但發(fā)送了RST包斷開連接可能是服務(wù)器端應(yīng)用出錯如果客戶端根本沒發(fā)出請求可能是客戶端應(yīng)用邏輯問題。解析應(yīng)用層數(shù)據(jù)如果協(xié)議是基于文本的如JSON over TCP在TCP流窗口中可能直接看到可讀內(nèi)容。如果是二進(jìn)制協(xié)議需要在數(shù)據(jù)包字節(jié)流面板結(jié)合開發(fā)文檔分析特定偏移位置的字段值是否正確。你可以使用Wireshark的“解析為”Decode As...功能嘗試讓W(xué)ireshark用某種方式解析負(fù)載但更可靠的是自己編寫Wireshark插件Lua腳本來解析自定義協(xié)議。7. 常見問題與排查技巧實錄即使掌握了基本操作在實際使用中還是會遇到各種“坑”。這里記錄了一些常見問題和我的解決思路。7.1 抓不到包或網(wǎng)卡列表為空Windows平臺最常見原因沒有以管理員身份運行Wireshark。務(wù)必右鍵“以管理員身份運行”。Npcap/WinPcap驅(qū)動問題嘗試重新安裝Npcap。在安裝時可以嘗試不勾選“WinPcap API兼容模式”或更換版本。虛擬機(jī)環(huán)境如果你在虛擬機(jī)里使用Wireshark抓取的是虛擬網(wǎng)卡如VMnet的流量。要抓取宿主物理機(jī)的流量通常需要在宿主機(jī)上抓包或者配置虛擬網(wǎng)卡為混雜模式并做端口鏡像這取決于虛擬化軟件。無線網(wǎng)卡與監(jiān)控模式想抓取其他Wi-Fi信道的流量監(jiān)控模式需要網(wǎng)卡驅(qū)動支持并在安裝Npcap時勾選支持raw 802.11的選項。即便如此很多消費級無線網(wǎng)卡也不完全支持。7.2 過濾表達(dá)式不工作語法錯誤Wireshark的顯示過濾器有自動補(bǔ)全和顏色高亮。如果表達(dá)式是紅色的說明語法錯誤。檢查括號是否匹配、字段名是否正確區(qū)分大小寫、比較符是否合適例如對字符串用或contains對數(shù)值用,等。字段不存在不是所有數(shù)據(jù)包都有你指定的字段。例如對一個ARP包使用tcp.port過濾它永遠(yuǎn)不會匹配因為ARP包沒有TCP層。可以先嘗試一個寬泛的過濾器如ip確保有數(shù)據(jù)包顯示再逐步細(xì)化??崭駟栴}ip.addr192.168.1.1和ip.addr 192.168.1.1都是合法的但邏輯操作符兩邊最好有空格如ip.src10.0.0.1 and tcp.port80。7.3 分析時Wireshark卡頓或無響應(yīng)捕獲文件過大長時間抓取高速網(wǎng)絡(luò)會產(chǎn)生巨大的捕獲文件幾個GB甚至幾十GB。在分析前先用捕獲過濾器限制范圍或者抓包時設(shè)置環(huán)形緩沖區(qū)Capture-Options-Output標(biāo)簽頁和文件切割。顯示過濾器過于復(fù)雜對超大文件應(yīng)用非常復(fù)雜的顯示過濾器可能會消耗大量CPU和內(nèi)存。嘗試先導(dǎo)出過濾后的數(shù)據(jù)包File-Export Specified Packets...然后分析較小的文件。禁用實時更新在抓包過程中可以取消勾選Capture-Options中的Update list of packets in real time等停止抓包后再分析可以提升性能。7.4 如何定時抓包Wireshark本身沒有直接的圖形化定時抓包功能但可以通過命令行工具tsharkWireshark的命令行版本配合系統(tǒng)任務(wù)計劃來實現(xiàn)。例如在Windows上你可以寫一個批處理腳本echo off set INTERFACE\Device\NPF_{你的網(wǎng)卡GUID} set DURATION300 set INTERVAL3600 set OUTPUT_DIRC:\Captures for /l %%i in (1, 1, 24) do ( tshark -i %INTERFACE% -a duration:%DURATION% -w %OUTPUT_DIR%\capture_%%i.pcapng timeout /t %INTERVAL% )這個腳本會每隔1小時3600秒抓取5分鐘300秒的流量保存為24個文件。你需要先用tshark -D命令獲取網(wǎng)卡名稱GUID。然后在Windows任務(wù)計劃程序中創(chuàng)建任務(wù)定時執(zhí)行此腳本。在Linux上使用cron定時任務(wù)配合tshark或dumpcap另一個更輕量的捕獲工具實現(xiàn)類似功能。7.5 關(guān)于USB流量捕獲Wireshark通過USBPcap組件支持USB流量捕獲。安裝Wireshark時如果勾選了USBPcap你會在捕獲接口列表中看到USB設(shè)備。但請注意捕獲USB流量通常也需要管理員/root權(quán)限。你需要明確知道你要捕獲的是哪個USB總線Bus和哪個設(shè)備。USB流量非常底層數(shù)據(jù)格式復(fù)雜除非你非常了解USB協(xié)議規(guī)范或正在開發(fā)USB設(shè)備驅(qū)動否則解析起來極其困難。常見的“分析USB鍵盤輸入”或“獲取USB傳輸速率”需求對于通用設(shè)備Wireshark可能無法直接解析出有意義的應(yīng)用層數(shù)據(jù)。wireshark如何分析usb傳輸速率更多是通過統(tǒng)計USB批量傳輸Bulk Transfer數(shù)據(jù)包的大小和時間間隔在Statistics-IO Graph中觀察速率曲線。Wireshark的深度遠(yuǎn)不止于此。它支持上千種協(xié)議的解碼有著強(qiáng)大的統(tǒng)計和可視化能力甚至可以用Lua腳本進(jìn)行功能擴(kuò)展。但最重要的是它為你提供了一種“眼見為實”的能力讓你能越過抽象層直接觀察網(wǎng)絡(luò)的真實脈動。最好的學(xué)習(xí)方式就是帶著一個具體的問題去用它。下次當(dāng)你遇到網(wǎng)絡(luò)不通、服務(wù)超時、性能抖動時別急著重啟先抓個包看看。你會發(fā)現(xiàn)很多答案就在那些流動的數(shù)據(jù)包里。