如何使用 RawCap 和 Wireshark 排查本地網路請求中的404錯誤
開發微服務應用時,正確配置網路請求的轉發至關重要。本文將透過一個具體示例來展示如何使用 RawCap 和 Wireshark 來監控和分析本地迴路請求,並排查導致 HTTP 404 錯誤的可能原因。
背景
在本例中,使用者的瀏覽器請求經過多個服務處理後最終返回了404錯誤。然而, Wireshark 無法抓取本地迴路請求。
- 瀏覽器請求(或者postman):
http://localhost:7777/api/user/login?username=admin&password=123456
- NGINX 處理:匹配以
api
開頭的後端請求,並在轉發前去掉api
字首,將請求轉發至微服務監聽埠8086:http://localhost:8086/user/login?username=admin&password=123456
- Spring Cloud Gateway 處理:接收來自 NGINX 的請求,並透過負載均衡策略將請求轉發至後端服務。
- 後端服務:理應處理
http://localhost:8085/user/login?username=admin&password=123456
,但返回了404錯誤。
使用 RawCap 捕獲本地迴路請求
-
下載和執行 RawCap:
- 訪問 NETRESEC官網 下載 RawCap.exe。
- 以管理員身份執行 RawCap,選擇監聽127.0.0.1介面,並指定輸出檔名(例如
localhost_traffic.pcap
)。
RawCap.exe 127.0.0.1 localhost_traffic.pcap
-
生成請求:
- 發起引起404錯誤的請求。
-
停止 RawCap 捕獲:
- 捕獲足夠的資料後,使用 Ctrl+C 停止 RawCap。
使用 Wireshark 分析 pcap 檔案
-
開啟 Wireshark 載入 pcap 檔案:
- 啟動 Wireshark, 開啟
localhost_traffic.pcap
檔案。
- 啟動 Wireshark, 開啟
-
分析請求和響應:
- 應用 HTTP 過濾器 (
http
) 檢視所有 HTTP 請求和響應。 - 檢查請求是否正確經過各階段處理,尤其關注 URL 的變化和傳遞引數。
- 應用 HTTP 過濾器 (
-
深入問題排查:
- 檢查 URL 重寫是否正確,確認 NGINX 是否正確去除了
api
字首。 - 確認閘道器是否正確處理並轉發至後端服務,後端服務是否因為路徑或引數錯誤返回404。
- 檢查 URL 重寫是否正確,確認 NGINX 是否正確去除了
下圖是RawCap 捕獲的本地請求:
觀察到請求已經成功地被 NGINX 處理,並且透過移除字首 'api' 後正確地轉發到了上游的閘道器伺服器(埠:8086)。然而,我們發現了問題所在:請求並沒有按照預期路由到後端服務的埠8085,而是從閘道器的埠8086錯誤地迴環到了埠111354。這表明問題主要集中在閘道器的路由配置上。
結論
透過結合使用 RawCap 和 Wireshark,我們可以詳細追蹤請求在本地網路環境中的流轉過程,從而定位問題所在。這種方法可以幫助開發人員和系統管理員更準確地診斷並修復網路配置相關的問題,特別是涉及多個服務或層的複雜請求鏈路。
希望本文能幫助你更好地理解如何利用網路監控工具來診斷和解決開發中的網路問題。如果你有任何疑問或需要進一步的幫助,請在評論中提出。