tcpdump抓包必知必會(huì)
- tcpdump原理 & 在tcp協(xié)議棧的位置
- tcpdump用法
- 基于協(xié)議、主機(jī)、端口過濾
- 使用and or邏輯運(yùn)算符做復(fù)雜的過濾操作
- tcpdump flags
1. tcpdump原理
linux中非常有用的網(wǎng)絡(luò)工具,運(yùn)行在用戶態(tài)。
數(shù)據(jù)包到達(dá)網(wǎng)卡,經(jīng)過數(shù)據(jù)包過濾器bpf篩選后,拷貝至用戶態(tài)的tcpdump程序。
tcpdump抓包
“抓” 這個(gè)動(dòng)作是由數(shù)據(jù)包過濾器bpf完成, bpf的主要作用就是根據(jù)用戶輸入的過濾規(guī)則,直將用戶關(guān)心的數(shù)據(jù)包拷貝至tcpdump。注意是拷貝,不是剪切。
面試題: 某些數(shù)據(jù)包被iptables封禁,是否可通過tcpdump抓包?
linux中netfilter是工作在tcp協(xié)議棧階段, tcpdump的過濾器bpf是工作在更底層,所以當(dāng)然是可以抓到包。
2. tcpdump常規(guī)用法
抓包上帝視角:
- 可將tcpdump當(dāng)做網(wǎng)絡(luò)請求的對端。
- tcpdump 支持網(wǎng)絡(luò)層、協(xié)議、鑄就、網(wǎng)絡(luò)或端口的過濾,并提供and、or、not等邏輯語句來幫助過濾。
2.1抓包前置參數(shù):
- -D: 提供可以捕獲流量的設(shè)備列表
- -c n:捕獲n個(gè)包后終止
- -n: tcpdump默認(rèn)會(huì)對(ip:port)轉(zhuǎn)換為主機(jī)名,影響抓包效率,-n可設(shè)置不做轉(zhuǎn)換,直接顯示ip地址;
- -s 0 : 設(shè)置抓取(已經(jīng)篩選出的數(shù)據(jù)包的)長度,如果不設(shè)置默認(rèn)是68 字節(jié),0 意味著tcpdump自動(dòng)選擇合適的長度抓包;
- -w: 抓取的內(nèi)容輸出到文件
- -r : 跟-w 是對應(yīng)的,從文件讀取
- -vvv :輸出詳細(xì)的最高級(jí)別
2.2 抓包篩選參數(shù):
- host: 過濾特定主機(jī)的流量,可填hostname或者ip;
注意:命令中的hostname會(huì)被解析成ip地址,如果解析出來的是vip(可能會(huì)作用到多個(gè)實(shí)際的業(yè)務(wù)Host),會(huì)抓取到非預(yù)期的數(shù)據(jù)包。
可以使用 src host 或者 dst host來抓取特定方向的流量。
tcpdump -n -i eth0 host janus.qa.xxxx.com -vvv -tttt
2023-11-08 14:37:48.478256 IP (tos 0x0, ttl 64, id 47134, offset 0, flags [DF], proto TCP (6), length 554)
10.178.75.56.44054 > 10.98.21.3.http: Flags [P.], cksum 0x776b (incorrect -> 0x1251), seq 514:1028, ack 186, win 589, length 514: HTTP, length: 514
POST /janus-api/api/agent/tasks HTTP/1.1
Host: janus.qa.****.com
User-Agent: Go-http-client/1.1
Content-Length: 366
Accept-Encoding: gzip
{"groupId":"63fefa20b1e3c135612005c9","ip":"10.178.75.56","env":"qa","idc":"officeidc_hd2","tags":["10.178.75.56","officeidc_hd2","machine"],"lastTaskId":"202303210000000017","versionInfo":{"staticConfigVersionId":"v2023.03.20.004","autoConfigVersionId":"v2023.03.20.004","configVersionId":"0","status":true,"ipTime":"2019-12-04 01:06:06"},"lastTasks":{"status":[]}}[!http]
2023-11-08 14:37:48.520706 IP (tos 0x0, ttl 52, id 64787, offset 0, flags [DF], proto TCP (6), length 40)
10.98.21.3.http > 10.178.75.56.44054: Flags [.], cksum 0xa1f6 (correct), seq 186, ack 1028, win 150, length 0
2023-11-08 14:37:48.523697 IP (tos 0x0, ttl 52, id 64788, offset 0, flags [DF], proto TCP (6), length 225)
10.98.21.3.http > 10.178.75.56.44054: Flags [P.], cksum 0xb2f6 (correct), seq 186:371, ack 1028, win 150, length 185: HTTP, length: 185
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 38
Connection: keep-alive
Date: Wed, 08 Nov 2023 06:37:48 GMT
2023-11-08 14:37:48.523718 IP (tos 0x0, ttl 64, id 47135, offset 0, flags [DF], proto TCP (6), length 40)
10.178.75.56.44054 > 10.98.21.3.http: Flags [.], cksum 0x7569 (incorrect -> 0x9f7e), seq 1028, ack 371, win 597, length 0
-
port : 指定抓取某個(gè)X端口的網(wǎng)絡(luò)數(shù)據(jù)包。
-
and or not邏輯運(yùn)算符 :
tcpdump -i eth0 "host redhat.com and (port 80 or port 443)" // 抓取指定主機(jī) 80 http或者h(yuǎn)ttps請求 -
tcp/udp: 過濾tcp/udp流量: tcpdump -i eth0 host janus.t.17usoft.com and tcp
-
捕獲http請求: tcpdump -i any port 80 and 'http request
-
捕獲http響應(yīng): tcpdump -i any port 80 and 'http response'
2.3 tcpdump示例
利用 tcpdump -w xxx.tcp 抓包之后, 拖進(jìn)wireshark, 我們來分析http交互

選中一條記錄后,左下視圖會(huì)顯示4條協(xié)議棧, 對應(yīng)tcp/ip 4層協(xié)議棧。
最上面的幀F(xiàn)rames,包含了所有內(nèi)容。
| tcp/ip協(xié)議棧 | 對應(yīng)tcpdump左下視圖 |
|---|---|
| 應(yīng)用層 | |
| 傳輸層 TCP、UDP | Transmission Control Protocol |
| 網(wǎng)絡(luò)層 (IP,ICMP,ARP協(xié)議) | Internet Protocl Version 4 |
| 鏈路層 (以太網(wǎng)協(xié)議) | Ethernet2 |
-
應(yīng)用層對請求包做格式定義, 比如 html;
-
傳輸層協(xié)議加上 雙方通信的端口號(hào),確定 通信雙方的應(yīng)用程序;
-
網(wǎng)絡(luò)層加上雙方的IP地址(可能由DNS協(xié)議給出), 確定了雙方的網(wǎng)絡(luò)位置;
-
最后鏈路層加上了 MAC地址(通過ARP協(xié)議),確認(rèn)雙方物理位置,并對數(shù)據(jù)包分組,形成數(shù)據(jù)幀F(xiàn)rames, 最后通過傳輸介質(zhì)送到對方主機(jī)。
-
https://docs.netgate.com/pfsense/en/latest/diagnostics/packetcapture/tcpdump.html
-
https://amits-notes.readthedocs.io/en/latest/networking/tcpdump.html
本文來自博客園,作者:{有態(tài)度的馬甲},轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/JulianHuang/p/17823599.html
歡迎關(guān)注我的原創(chuàng)技術(shù)、職場公眾號(hào), 加好友談天說地,一起進(jìn)化

浙公網(wǎng)安備 33010602011771號(hào)