TCPDump實戰手冊:協議/端口/IP過濾與組合分析指南

目錄

一、基礎過濾速查表

1. 協議過濾(單協議)

2. 端口過濾

3. IP地址過濾

二、組合過濾實戰示例

1. 協議+端口組合

2. IP+端口組合

3. 復雜邏輯組合

三、高級協議分析示例

1. HTTP請求分析

2. DNS問題排查

3. TCP連接問題分析

四、組合過濾場景分析指南

場景1:網站訪問失敗

場景2:數據庫連接超時

場景3:API性能下降

五、TCP報文分析

一、Flags [S] 和 Flags [R.] 的含義

二、TCP 標志位全集及 tcpdump 表示

三、詳細分析 TCP 報文的方法

1. 基礎字段解析

2. 使用 tcpdump 參數深入分析

3. 結合 Wireshark 可視化分析

4. 進階診斷技巧

四、常見場景與標志位組合

五、總結

六、結果分析方法與工具

1. 命令行實時分析

2. 使用Wireshark深度分析

3. 自動化分析腳本

七、性能優化技巧

1. 高效捕獲配置

2. 長期監控方案

八、常用場景命令速查

學習資源推薦


掌握TCPDump的核心在于熟練使用過濾表達式精準捕獲目標流量。本文整理了最實用的過濾示例,覆蓋協議、端口、IP等常見場景,并提供配套分析方法,助你快速定位網絡問題。

一、基礎過濾速查表

1. 協議過濾(單協議)

# 捕獲TCP流量
sudo tcpdump -i any tcp
?
# 捕獲UDP流量
sudo tcpdump -i any udp
?
# 捕獲ICMP(ping)流量
sudo tcpdump -i any icmp
?
# 捕獲ARP請求
sudo tcpdump -i any arp
?
# 捕獲DNS協議
sudo tcpdump -i any port 53

2. 端口過濾

# 捕獲80端口(HTTP)流量
sudo tcpdump -i any port 80
?
# 捕獲443端口(HTTPS)流量
sudo tcpdump -i any port 443
?
# 捕獲源端口為8080的流量
sudo tcpdump -i any src port 8080
?
# 捕獲目標端口3306(MySQL)的流量
sudo tcpdump -i any dst port 3306
?
# 捕獲端口范圍8000-9000的流量
sudo tcpdump -i any portrange 8000-9000

3. IP地址過濾

# 捕獲與192.168.1.100相關的所有流量
sudo tcpdump -i any host 192.168.1.100
?
# 捕獲來自10.0.0.1的流量
sudo tcpdump -i any src host 10.0.0.1
?
# 捕獲發送到8.8.8.8的流量
sudo tcpdump -i any dst host 8.8.8.8
?
# 捕獲192.168.1.0/24網段的流量
sudo tcpdump -i any net 192.168.1.0/24

二、組合過濾實戰示例

1. 協議+端口組合

# 捕獲HTTP流量(TCP+80端口)
sudo tcpdump -i any 'tcp and port 80'
?
# 捕獲HTTPS流量(TCP+443端口)
sudo tcpdump -i any 'tcp and port 443'
?
# 捕獲DNS流量(UDP+53端口)
sudo tcpdump -i any 'udp and port 53'

2. IP+端口組合

# 捕獲到8.8.8.8的DNS查詢
sudo tcpdump -i any 'dst host 8.8.8.8 and dst port 53'
?
# 捕獲來自192.168.1.100的SSH流量
sudo tcpdump -i any 'src host 192.168.1.100 and port 22'
?
# 捕獲到數據庫服務器的流量
sudo tcpdump -i any 'dst host 10.0.0.5 and (port 3306 or port 5432)'

3. 復雜邏輯組合

# 捕獲非HTTP的TCP流量
sudo tcpdump -i any 'tcp and not port 80'
?
# 捕獲來自特定網段到外部80端口的流量
sudo tcpdump -i any 'src net 192.168.1.0/24 and dst port 80'
?
# 捕獲SYN或RST包(TCP連接建立/重置)
sudo tcpdump -i any 'tcp[tcpflags] & (tcp-syn|tcp-rst) != 0'

三、高級協議分析示例

1. HTTP請求分析

# 捕獲HTTP GET/POST請求頭
sudo tcpdump -i any -A -s0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0' | grep -E 'GET |POST |HTTP/'
?
# 輸出示例
GET /api/users HTTP/1.1
Host: example.com
User-Agent: curl/7.68.0

分析要點

  • 檢查請求路徑和Host頭是否匹配

  • 查看User-Agent識別客戶端類型

  • 觀察是否有異常請求頭

2. DNS問題排查

# 捕獲DNS請求和響應
sudo tcpdump -n -s0 -i any port 53
?
# 輸出示例
15:30:45.123456 IP 192.168.1.100.5353 > 8.8.8.8.53: 12345+ A? example.com. (32)
15:30:45.234567 IP 8.8.8.8.53 > 192.168.1.100.5353: 12345 1/0/0 A 93.184.216.34 (48)

分析流程

  1. 確認DNS查詢是否發出(A? example.com

  2. 檢查是否收到響應(A 93.184.216.34

  3. 響應時間是否正常(本例中111毫秒)

  4. 響應碼:NOERROR(0)表示成功,NXDOMAIN(3)表示域名不存在

3. TCP連接問題分析

# 捕獲TCP握手包
sudo tcpdump -i any 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'# 輸出示例
16:20:01.123456 IP 10.0.0.2.34567 > 10.0.0.3.80: Flags [S], seq 123456789
16:20:01.234567 IP 10.0.0.3.80 > 10.0.0.2.34567: Flags [S.], seq 987654321, ack 123456790
16:20:06.456789 IP 10.0.0.2.34567 > 10.0.0.3.80: Flags [S], seq 123456789  # 重傳

問題診斷

  • 正常流程:SYN → SYN-ACK → ACK

  • 本例問題:客戶端未收到SYN-ACK,導致SYN重傳

  • 可能原因:防火墻阻止、服務未監聽、網絡不通

四、組合過濾場景分析指南

場景1:網站訪問失敗

# 組合過濾:目標域名+端口
sudo tcpdump -i any 'host example.com and port 80'# 分析步驟:
1. 檢查是否有SYN包發出 → 無則表示DNS或路由問題
2. 檢查是否收到SYN-ACK → 無則表示服務未響應
3. 檢查是否發送HTTP請求 → 無則表示客戶端問題
4. 檢查HTTP響應碼 → 5xx為服務端錯誤
 

場景2:數據庫連接超時

# 組合過濾:數據庫IP+端口
sudo tcpdump -i any 'host 10.0.0.5 and port 3306'# 分析步驟:
1. 檢查TCP握手是否完成 → 未完成則檢查網絡/防火墻
2. 觀察連接建立時間 → 長延遲可能網絡問題
3. 檢查是否有重傳 → 重傳指示丟包
4. 查看連接是否被RST終止 → 服務端主動拒絕

場景3:API性能下降

# 組合過濾:API端點+方法
sudo tcpdump -i any 'port 8080 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354' -A# 分析步驟:
1. 測量請求-響應時間 → 定位延遲階段
2. 檢查是否有TCP重傳 → 網絡問題
3. 觀察HTTP響應碼分布 → 5xx增加指示服務問題
4. 分析請求/響應大小 → 大數據量可能影響性能

五、TCP報文分析

一、Flags [S] 和 Flags [R.] 的含義

  1. Flags [S](SYN 標志) 表示該數據包攜帶同步標志位(SYN),用于建立 TCP 連接的三次握手過程36。

    • 場景:客戶端首次向服務器發送連接請求時,會設置SYN=1,此時tcpdump顯示為Flags [S]。例如:

      10:00:00.123456 IP client.50000 > server.80: Flags [S], seq 123456, win 65535
      
    • 作用:初始化序列號,請求與對端建立連接。

  2. Flags [R.](RST+ACK 標志) 表示該數據包同時設置了復位標志位(RST)*和*確認標志位(ACK),通常用于異常終止連接。

    • 場景

      • 服務器收到發往未監聽端口的 SYN 請求時,會回復RST+ACK,表示 “端口不可達”。

      • 連接過程中出現數據不一致(如序列號不匹配),一方發送RST+ACK強制關閉連接。

    • tcpdump 輸出示例

      10:00:01.789012 IP server.80 > client.50000: Flags [R.], seq 0, ack 123457, win 0
      
    • 特點:RST 包不攜帶數據,接收方收到后會立即終止連接并通知應用層。

二、TCP 標志位全集及 tcpdump 表示

TCP 頭部共有 6 個標志位,在tcpdump中通過以下字符表示:

標志位全稱簡寫含義
SYNSynchronizeS同步序列號,用于建立連接(三次握手第一步)
ACKAcknowledgment.確認號有效,用于確認已接收數據(除 SYN 包外,其他包通常包含 ACK)
RSTResetR強制復位連接,用于終止異常或無效連接
FINFinishF結束標志,用于關閉連接(四次揮手第一步)
PSHPushP提示接收方立即將數據交付給應用層,避免緩沖隊列積壓
URGUrgentU緊急指針有效,表示數據需優先處理(帶外數據)

特殊組合

  • S. = SYN + ACK(三次握手第二步,服務器響應客戶端的 SYN 請求)

  • F. = FIN + ACK(四次揮手第二步,對端確認關閉請求)

  • P. = PSH + ACK(推送數據并確認)

三、詳細分析 TCP 報文的方法

1. 基礎字段解析

通過tcpdump輸出的關鍵字段可定位問題:

10:00:00.123456 IP client.50000 > server.80: Flags [S], seq 123456, win 65535
  • 時間戳10:00:00.123456 —— 抓包時間。

  • IP 地址與端口client.50000 > server.80 —— 源 IP: 端口 → 目的 IP: 端口。

  • 標志位Flags [S] —— SYN 標志位。

  • 序列號seq 123456 —— 初始序列號(ISN),用于數據排序和確認。

  • 窗口大小win 65535 —— 接收方通告的滑動窗口大小,單位為字節。

2. 使用 tcpdump 參數深入分析
  • 抓取完整數據包

    tcpdump -i eth0 -s0 -w capture.pcap 'tcp port 80'
    • -s0:關閉默認的 68 字節截斷,抓取完整數據包。

    • -w capture.pcap:保存為 PCAP 文件供后續分析。

  • 顯示十六進制和 ASCII 內容

    tcpdump -XX -s0 'tcp port 80'
    • -XX:同時顯示二層頭、IP 頭、TCP 頭及數據部分的十六進制和 ASCII 表示。

  • 過濾特定標志位

    tcpdump 'tcp-syn|tcp-rst'  # 僅抓取SYN或RST包

3. 結合 Wireshark 可視化分析
  • 導入 PCAP 文件: 將capture.pcap拖入 Wireshark,通過Statistics → Conversation List → TCP查看流量會話。

  • 關鍵分析點

    • 三次握手失敗:若客戶端發送 SYN 后未收到 SYN+ACK,可能是服務器端口未監聽(觸發 RST)或網絡阻斷。

    • 重傳與超時:Wireshark 的 TCP Stream Graph → Time-Sequence Graph (Stevens) 可直觀顯示重傳次數和超時事件。

    • 異常終止:大量 RST 包可能表示連接被強制關閉,需檢查防火墻規則或應用邏輯。

4. 進階診斷技巧
  • 序列號與確認號

    • 正常情況下,ack = seq + 數據長度。若ack值異常,可能存在丟包或亂序。

    • 示例:客戶端發送seq=100、長度 50 字節的數據,服務器應回復ack=150

  • 窗口縮放: 若win字段顯示為0,可能是接收方緩沖區已滿,觸發流量控制(TCP Zero Window)。

  • 緊急數據: 若URG標志位被設置,需結合urgptr字段定位緊急數據位置。

四、常見場景與標志位組合

  1. 三次握手成功

    client → server: Flags [S]
    server → client: Flags [S.]
    client → server: Flags [.]
    
  2. 連接拒絕

    client → server: Flags [S]
    server → client: Flags [R.]  # 端口未監聽或防火墻攔截
    
  3. 正常關閉(四次揮手)

    client → server: Flags [F.]
    server → client: Flags [.]
    server → client: Flags [F.]
    client → server: Flags [.]
    
  4. 數據推送

    client → server: Flags [P.]  # 立即將數據交付給應用層
    

五、總結

通過tcpdump和 Wireshark 結合分析 TCP 標志位,可快速定位網絡連接問題:

  • SYN/RST:排查端口是否開放、防火墻規則是否攔截。

  • PSH/ACK:驗證數據是否及時交付應用層。

  • FIN/ACK:檢查連接關閉是否正常完成。

掌握這些方法后,可有效診斷網絡延遲、丟包、連接異常等問題,提升 TCP/IP 協議棧的故障排查效率。

六、結果分析方法與工具

1. 命令行實時分析

# 統計TCP標志位分布
sudo tcpdump -i any -q -tttt 'tcp' | awk '{print $6}' | sort | uniq -c# 輸出示例:1422 Flags [P.]893 Flags [.]128 Flags [S]5 Flags [R.]

解讀

  • [P.]:數據傳輸包(PSH+ACK)

  • [.]:ACK確認包

  • [S]:SYN連接請求

  • [R.]:連接重置(異常)

2. 使用Wireshark深度分析

# 捕獲并保存到文件
sudo tcpdump -i any -w capture.pcap# 在Wireshark中分析
wireshark capture.pcap

Wireshark高級功能

  • 流量圖(Statistics > Flow Graph)

  • 協議分層統計(Statistics > Protocol Hierarchy)

  • 專家信息分析(Analyze > Expert Info)

  • IO圖表(Statistics > IO Graph)

3. 自動化分析腳本

# 分析HTTP響應時間
tcpdump -ttt -n -r capture.pcap 'tcp port 80 and tcp[13] == 0x18' | \awk '/HTTP/{print $1, $5, $6, $7, $8}'# 輸出示例
0.000000 GET /api/v1/users 200
0.125000 POST /api/v1/orders 201
0.250000 GET /api/v1/products 200

七、性能優化技巧

1. 高效捕獲配置

# 限制包大小(只捕獲頭部)
sudo tcpdump -s 128 -w optimized.pcap# 設置緩沖區大小(避免丟包)
sudo tcpdump -B 4096 -w buffer_optimized.pcap# 過濾后保存(減少文件大小)
sudo tcpdump -w http_only.pcap 'port 80'

2. 長期監控方案

# 按時間分割文件(每小時一個)
sudo tcpdump -G 3600 -w capture_%H.pcap# 按大小分割文件(每100MB)
sudo tcpdump -C 100 -w capture.pcap# 自動壓縮歸檔
sudo tcpdump -w - | gzip > capture_$(date +%Y%m%d_%H%M%S).pcap.gz

八、常用場景命令速查

場景命令
基礎抓包sudo tcpdump -i any -w capture.pcap
HTTP分析sudo tcpdump -i any -A -s0 'tcp port 80'
DNS調試sudo tcpdump -n -s0 port 53
TCP連接sudo tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0'
IP+端口sudo tcpdump 'host 192.168.1.100 and port 443'
性能監控sudo tcpdump -tttt -q -n -i any > traffic.log

黃金法則:遇到網絡問題,三步走:

  1. sudo tcpdump -i any -w capture.pcap 保存原始數據

  2. 使用過濾命令縮小范圍

  3. 在Wireshark中深入分析

學習資源推薦

  1. 官方文檔man tcpdump(最權威參考)

  2. 過濾指南:PCAP-FILTER(7)

  3. 實戰教程:TCPDump Mastery

  4. 在線練習:CloudShark

立即打開終端嘗試這些命令,遇到具體問題歡迎在評論區交流討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916776.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【智能協同云圖庫】智能協同云圖庫第八彈:基于阿里云百煉大模型—實現 AI 擴圖功能

AI 擴圖功能 需求分析 隨著 AI 的高速發展&#xff0c;AI 幾乎可以應用到任何傳統業務中&#xff0c;增強應用的功能&#xff0c;帶給用戶更好的體驗。 對于圖庫網站來說&#xff0c;AI 也有非常多的應用空間&#xff0c;比如可以利用 AI 繪圖大模型來編輯圖片&#xff0c;實現…

2025年Solar應急響應公益月賽-7月筆記ing

應急響應身為顏狗的我是真心覺得lovelymem的ui寫得~~~~【任務1】應急大師題目描述&#xff1a;請提交隱藏用戶的名稱&#xff1f;print打印注冊表&#xff0c;或者開啟環境是就有【任務4】應急大師題目描述&#xff1a;請提交黑客創建隱藏用戶的TargetSid&#xff08;目標賬戶安…

C++/CLI vs 標準 C++ vs C# 語法對照手冊

&#x1f680; C/CLI vs 標準 C vs C# 語法對照手冊&#x1f9e9; 核心類型系統對比 // 類型聲明語法對比 標準 C C/CLI C# ─────────────────────────────────────────────────…

倉庫管理系統-2-后端之基于繼承基類的方式實現增刪改查

文章目錄 1 數據庫表user 2 后端通用框架 2.1 User.java(實體類) 2.2 使用封裝的方法(繼承基類) 2.2.1 UserMapper.java(mapper接口) 2.2.2 UserService.java(service接口) 2.2.3 UserServiceImpl.java(service實現類) 2.2.4 UserController.java(控制器) 3 增刪改查(封裝的方法…

【el-table滾動事件】el-table表格滾動時,獲取可視窗口內的行數據

一個簡單的獲取內容的辦法 表格部分&#xff0c;主要是ref寫一下<el-table :data"tableData" ref"tableRef"> </el-table>進入頁面的時候綁定監聽 mounted(){ // 綁定滾動事件this.$nextTick(() > {const table this.$refs.tableRef;const…

OCR 賦能自動閱卷:讓評分更高效精準

考試閱卷中&#xff0c;OCR 技術正成為高效助手&#xff0c;尤其在客觀題和標準化答題場景中表現亮眼。將考生答題卡掃描后&#xff0c;OCR 能快速識別填涂的選項、手寫數字或特定符號&#xff0c;與標準答案比對后自動判分。相比人工閱卷&#xff0c;它能在短時間內完成成百上…

在docker中安裝frp實現內網穿透

服務端frps 1.首先在服務器端安裝frps docker pull snowdreamtech/frps2.本地創建frps的配置文件frps.ini [common] bind_port 7000 # frp 服務端控制端口 token xxxxx # 客戶端認證密鑰3.啟動frps docker run -d --name frps \ --network host \ --restartalwa…

電腦開機后網絡連接慢?

在數字化日益普及的今天&#xff0c;電腦已成為我們工作和生活中不可或缺的工具。但是&#xff0c;可能很多用戶都遇到過電腦開機后網絡連接慢的情況&#xff0c;這不僅影響了我們的工作效率&#xff0c;還極大降低了上網體驗。怎么解決該問題呢&#xff1f;本文分享的這5個方法…

一分鐘部署一個導航網站

先看效果1.部署教程 mkdir -p /home/ascendking/mysite cd /home/ascendking/mysite# 安裝 WebStack-Hugo 主題git clone https://gitee.com/WangZhe168_admin/WebStack-Hugo.git themes/WebStack-Hugo# 將 exampleSite 目錄下的文件復制到 hugo 站點根目錄 cd /home/ascendki…

Rust實現微積分與高等數學公式

基于Rust實現高等數學中微積分 以下是基于Rust實現高等數學中微積分相關公式的示例整理,涵蓋微分、積分、級數等常見計算場景。內容分為基礎公式和進階應用兩類,提供可直接運行的Rust代碼片段(需依賴num或nalgebra等庫)。 微分運算 導數的數值近似(前向差分) 適用于函…

Android 鍵盤

基礎知識1. 物理鍵盤&#xff08;Physical Keyboard&#xff09;定義物理鍵盤指的是設備上真實存在的、可以按壓的鍵盤。例如&#xff1a;早期的 Android 手機&#xff08;如黑莓、摩托羅拉 Milestone&#xff09;自帶的 QWERTY 鍵盤外接的藍牙/USB 鍵盤平板或 Chromebook 上的…

SuperClaude Framework 使用指南

SuperClaude Framework 使用指南SuperClaude Framework 是一個開源配置框架&#xff0c;將 Claude Code 從通用 AI 助手轉變為專業的上下文感知開發伙伴。該框架通過模板驅動架構應用軟件工程原理&#xff0c;為專業軟件開發工作流程提供了強大的增強功能。目前該項目處于 v3.0…

Ruby 發送郵件 - SMTP

Ruby 發送郵件 - SMTP 在互聯網的世界中,郵件服務已經成為我們日常生活中不可或缺的一部分。而在開發過程中,使用Ruby發送郵件是一項基本技能。SMTP(Simple Mail Transfer Protocol)是互聯網上用于發送電子郵件的標準協議。本文將詳細介紹如何在Ruby中使用SMTP發送郵件。 …

Docker運行Ollama

1.docker-compose啟動ollama 按照 ollama docker-compose配置說明 配置并啟動ollama容器&#xff0c;啟動成功后&#xff0c;瀏覽器訪問 http://localhost:11434 如果顯示如下即代表成功 如果你的服務器支持GPU&#xff0c;可添加GPU參數支持&#xff0c;參考&#xff1a;htt…

輕松管理 WebSocket 連接!easy-websocket-client

在前端開發中&#xff0c;WebSocket 是實現實時通信的核心技術&#xff0c;但原生 WebSocket 的連接管理&#xff08;如斷連重連、心跳維護、事件監聽&#xff09;往往需要編寫大量重復代碼。今天給大家分享一個好用的 WebSocket 連接管理庫 —— easy-websocket-client&#x…

人工智能賦能社會治理:深度解析與未來展望

一、核心應用場景與技術實現1. 公共安全&#xff1a;智能防控與風險預警技術應用&#xff1a;立體化治安防控&#xff1a;AI攝像頭集成人臉識別、行為分析、多目標追蹤技術&#xff0c;提升破案率與公共安全能力。例如&#xff0c;深圳某區通過AI系統使盜竊案件破案率提升40%。…

解決使用vscode連接服務器出現“正在下載 VS Code 服務器...”

# 解決使用vscode連接服務器出現“正在下載 VS Code 服務器...”## 首先在vscode的輸出中獲取 commit idtext [17:17:41.679] Using commit id "c306e94f98122556ca081f527b466015e1bc37b0" and quality "stable" for server 從上面的體制中可以看出&#…

React 項目中使用 Redux 實現公共狀態共享

在 React 項目中使用 Redux 實現公共下拉選狀態共享并通知各組件更新的完整方案如下&#xff1a;1. 安裝 Redux 必要依賴 npm install reduxjs/toolkit react-redux2. 創建 Redux Store 和 Slice store/selectSlice.js import { createSlice } from reduxjs/toolkit;const init…

徹底清理ArcGIS 10.2殘留的步驟

文章目錄前言一、徹底清理ArcGIS 10.2殘留的步驟總結前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、徹底清理ArcGIS 10.2殘留的步驟 &#x1f527; 徹底清理ArcGIS 10.2殘留的…

JDK主流版本及推薦版本

根據當前Java生態發展&#xff08;截至2025年7月&#xff09;&#xff0c;結合主流企業實踐、技術特性和支持周期&#xff0c;以下是JDK主流版本及推薦版本的詳細分析&#xff1a;&#x1f9e9; 一、主流JDK版本現狀??JDK 8 (LTS)????使用比例??&#xff1a;約30-35%&a…