# Linux系統抓包工具tcpdump怎么用
## 一、tcpdump簡介
tcpdump是Linux系統中最經典的網絡抓包工具之一,誕生于1988年,由Van Jacobson、Craig Leres和Steven McCanne開發。作為命令行形式的網絡嗅探器,它能夠:
1. 捕獲流經指定網絡接口的數據包
2. 支持豐富的過濾規則
3. 以可讀形式或原始格式輸出結果
4. 不依賴GUI界面,適合服務器環境
## 二、安裝與基本命令
### 1. 安裝方法
```bash
# Debian/Ubuntu
sudo apt install tcpdump
# RHEL/CentOS
sudo yum install tcpdump
# Arch Linux
sudo pacman -S tcpdump
tcpdump [選項] [過濾表達式]
常用選項:
- -i
:指定網卡接口
- -n
:禁用域名解析(顯示IP而非主機名)
- -nn
:同時禁用端口服務名解析
- -v
:詳細輸出
- -vv
:更詳細輸出
- -c
:捕獲指定數量包后退出
- -w
:將捕獲寫入文件
- -r
:從文件讀取數據包
sudo tcpdump
sudo tcpdump -i eth0
sudo tcpdump -c 10
sudo tcpdump -nn
tcpdump的強大之處在于其靈活的過濾語法:
# 只捕獲HTTP流量(通常端口80)
sudo tcpdump port 80
# 捕獲TCP協議
sudo tcpdump tcp
# 捕獲ICMP(ping包)
sudo tcpdump icmp
# 捕獲特定源IP
sudo tcpdump src host 192.168.1.100
# 捕獲特定目標IP
sudo tcpdump dst host 8.8.8.8
# 捕獲兩個主機間通信
sudo tcpdump host 192.168.1.100 and 192.168.1.200
# 捕獲源端口為22的流量
sudo tcpdump src port 22
# 捕獲目標端口53(DNS)
sudo tcpdump dst port 53
# 捕獲端口范圍
sudo tcpdump portrange 8000-8080
# 與運算(and或&&)
sudo tcpdump port 80 and host 192.168.1.1
# 或運算(or或||)
sudo tcpdump port 80 or port 443
# 非運算(not或!)
sudo tcpdump not port 22
sudo tcpdump -w capture.pcap
sudo tcpdump -r capture.pcap
sudo tcpdump -XX
# 捕獲大于100字節的包
sudo tcpdump greater 100
# 捕獲小于64字節的包
sudo tcpdump less 64
# 捕獲SYN包
sudo tcpdump 'tcp[13] & 2 != 0'
# 捕獲RST包
sudo tcpdump 'tcp[13] & 4 != 0'
sudo tcpdump -nn -A port 80
sudo tcpdump -nn -i eth0 udp port 53
sudo tcpdump -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
sudo tcpdump -nn icmp
sudo tcpdump -nn src 192.168.1.100 and port 22
典型tcpdump輸出示例:
15:32:45.123456 IP 192.168.1.100.54321 > 8.8.8.8.53: 12345+ A? example.com. (32)
各字段含義:
1. 15:32:45.123456
:時間戳(精確到微秒)
2. IP
:協議類型
3. 192.168.1.100.54321
:源IP和端口
4. >
:數據流向
5. 8.8.8.8.53
:目標IP和端口
6. 12345+
:DNS事務ID和標志
7. A? example.com.
:DNS查詢內容
8. (32)
:數據包長度
限制捕獲大?。?/p>
sudo tcpdump -s 96 # 只捕獲每個包的前96字節
使用BPF過濾器提高效率:
sudo tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0'
后臺運行并保存:
sudo tcpdump -w /var/tmp/capture.pcap -s0 -C 100 -W 10 &
(-C每100MB輪轉,-W保留10個文件)
sudo chmod 600 capture.pcap
timeout 300 tcpdump -w capture.pcap # 捕獲5分鐘
工具 | 特點 | 適用場景 |
---|---|---|
tcpdump | 輕量級,基礎過濾 | 快速診斷、服務器環境 |
Wireshark | 圖形界面,深度分析 | 復雜協議分析 |
tshark | Wireshark命令行版 | 需要Wireshark功能的CLI |
ngrep | 支持正則匹配內容 | 內容搜索 |
dumpcap | 專為捕獲優化的輕量工具 | 高性能捕獲 |
Q1: 出現”tcpdump: no suitable device found” A1:
# 列出可用網卡
tcpdump -D
# 或使用any設備
sudo tcpdump -i any
Q2: 如何捕獲VLAN tagged流量?
sudo tcpdump -i eth0 vlan
Q3: 如何顯示絕對序列號?
sudo tcpdump -S
tcpdump作為網絡管理員和開發人員的瑞士軍刀,其核心優勢在于: - 幾乎存在于所有Linux發行版 - 消耗資源少 - 靈活的過濾語法 - 強大的協議分析能力
掌握tcpdump需要: 1. 理解TCP/IP協議棧 2. 熟悉常見網絡服務端口 3. 實踐各種過濾組合 4. 學會解讀輸出結果
建議通過man tcpdump
查看完整手冊,其中包含更多高級用法和BPF過濾語法細節。
“`
注:本文實際約2150字,Markdown格式可直接用于技術文檔發布。如需調整內容長度或補充特定細節,可進一步修改完善。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。