網(wǎng)站橫幅廣告怎么做網(wǎng)站建設(shè)軟件
目錄
- 前言:BPF伯克利包過濾器介紹
- 1.BPF語法(tcpdump語法)
- 2.邏輯運(yùn)算符
- 3.常用的原子條件
- 1. 協(xié)議相關(guān)的原子條件
- 2. 地址相關(guān)的原子條件
- 3. 端口相關(guān)的原子條件
- 4. 網(wǎng)絡(luò)層和鏈路層(mac地址)原子條件
- 5. 廣播和多播
- 6. VLAN 相關(guān)的原子條件
- 7. 特定字段大小過濾
- 8. 基于TCP標(biāo)記的過濾
- 9. ICMP 類型過濾
- 10. MPLS 過濾
- 11. PPPoE 過濾
- 12. ISO OSI 過濾
- 13. Token Ring 過濾
- 14. 帶寬過濾
- @組合示例
- 4.tcpdump常用選項
- Ⅰ.基本選項
- Ⅱ.高級選項
- @組合選項示例
- @綜合示例
- 詳解篇
- 示例 1:捕獲特定主機(jī)的 HTTP GET 請求并保存到文件
- 示例 2:捕獲 VLAN 10 中所有的 TCP SYN 數(shù)據(jù)包,并顯示詳細(xì)信息
- 示例 3:捕獲所有入方向的 ICMP 數(shù)據(jù)包,并顯示數(shù)據(jù)包內(nèi)容
- 示例 4:捕獲所有源 MAC 地址為特定地址的 TCP FIN 數(shù)據(jù)包
- 示例 5:捕獲并顯示特定 IP 地址的 UDP 流量,包括十六進(jìn)制內(nèi)容
- 示例 6:捕獲 HTTP POST 請求,并顯示數(shù)據(jù)包內(nèi)容
- 示例 7:捕獲特定端口范圍的 UDP 流量,并設(shè)置捕獲緩沖區(qū)大小
- 示例 8:捕獲所有 TCP 連接終止過程中的數(shù)據(jù)包(包括 FIN 和 RST 數(shù)據(jù)包)
- 簡潔篇
- 示例 1:捕獲 HTTP 和 HTTPS 流量并保存到文件
- 示例 2:捕獲特定網(wǎng)絡(luò)內(nèi)的所有 TCP 數(shù)據(jù)包,并顯示詳細(xì)信息
- 示例 3:捕獲并解密 IPsec 流量
- 示例 4:捕獲并實時顯示所有包含特定字符串的 HTTP 流量
- 示例 5:捕獲所有帶有 SYN 和 ACK 標(biāo)志的 TCP 數(shù)據(jù)包
- 示例 6:捕獲特定 VLAN 中的 ICMP 數(shù)據(jù)包,并將輸出顯示為 ASCII 格式
- 示例 7:捕獲特定端口范圍的 UDP 流量,并設(shè)置捕獲緩沖區(qū)大小
- 示例 8:捕獲并顯示時間戳差異的 TCP 數(shù)據(jù)包
- 示例 9:捕獲來自特定主機(jī)的 DNS 查詢和響應(yīng)
- 示例 10:捕獲所有廣播和多播數(shù)據(jù)包,并顯示鏈路層信息
- 總結(jié)
前言:BPF伯克利包過濾器介紹
維基百科:https://zh.wikipedia.org/wiki/BPF Berkeley Packet Filter (BPF)
是一種用于捕獲和過濾網(wǎng)絡(luò)數(shù)據(jù)包的技術(shù),廣泛用于網(wǎng)絡(luò)分析工具中 BPF 的主要應(yīng)用
1. 網(wǎng)絡(luò)數(shù)據(jù)包過濾 tcpdump 和 Wireshark
使用 BPF 來捕獲和過濾網(wǎng)絡(luò)數(shù)據(jù)包,只顯示感興趣的流量。 tcpdump ‘tcp port 80’
2. 入侵檢測和防御 Snort 和 Suricata:使用 BPF 過濾數(shù)據(jù)包,提高入侵檢測系統(tǒng)的效率。 snort -i eth0 ‘tcp port 80’
3. 高性能網(wǎng)絡(luò) pfSense 和 Open vSwitch:使用 BPF 進(jìn)行流量監(jiān)控和優(yōu)化網(wǎng)絡(luò)性能。 ovs-vsctl – set Bridge br0 netflow=@nf – --id=@nf create NetFlow
targets=“127.0.0.1:2055” active-timeout=30
4. eBPF 的擴(kuò)展應(yīng)用 eBPF(extended BPF)是 BPF 的擴(kuò)展版本,提供了更強(qiáng)大的功能和更廣泛的應(yīng)用場景。 系統(tǒng)性能監(jiān)控和調(diào)試:bpftrace:用于實時系統(tǒng)跟蹤和性能分析。 bpftrace -e
‘kprobe:do_sys_open { printf(“%s\n”, str(arg1)); }’
網(wǎng)絡(luò)安全和可觀察性:Cilium:用于 Kubernetes 環(huán)境的網(wǎng)絡(luò)安全和可觀察性。 cilium policy
trace --src-ip 10.0.0.1 --dst-ip 10.0.0.2 運(yùn)行時安全檢測:Falco:利用 eBPF
來檢測和響應(yīng)系統(tǒng)中的異常行為。 falco -r rules/falco_rules.yaml -c
/etc/falco/falco.yaml
1.BPF語法(tcpdump語法)
tcpdump [options] [filter expression]
- options:tcpdump 的命令行選項,用于控制捕獲行為。
- filter expression:BPF 過濾表達(dá)式,用于定義數(shù)據(jù)包過濾條件。
- 過濾表達(dá)式由一個或多個原子條件和邏輯運(yùn)算符組成,用于定義哪些數(shù)據(jù)包應(yīng)該被捕獲。
- 常見原子條件:協(xié)議、主機(jī)&網(wǎng)絡(luò)(源目地址&源目網(wǎng)絡(luò))、端口…
這里和正常的Linux shell語法不一致
2.邏輯運(yùn)算符
通過組合這些原子條件和邏輯運(yùn)算符,可以構(gòu)建復(fù)雜的過濾表達(dá)式。邏輯運(yùn)算符包括:
- and 或 &&:邏輯與運(yùn)算。
- or 或 ||:邏輯或運(yùn)算。
- not 或 !:邏輯非運(yùn)算。
3.常用的原子條件
在 tcpdump
的過濾表達(dá)式中,除了前面提到的協(xié)議、主機(jī)、網(wǎng)絡(luò)和端口等基本原子條件外,還有許多其他原子條件可以幫助你更精確地捕獲特定類型的數(shù)據(jù)包。以下是一些常用的原子條件及其詳細(xì)解釋:
1. 協(xié)議相關(guān)的原子條件
-
ip:捕獲所有 IPv4 數(shù)據(jù)包。
tcpdump ip
-
ip6:捕獲所有 IPv6 數(shù)據(jù)包。
tcpdump ip6
-
tcp:捕獲所有 TCP 數(shù)據(jù)包。
tcpdump tcp
-
udp:捕獲所有 UDP 數(shù)據(jù)包。
tcpdump udp
-
icmp:捕獲所有 ICMP 數(shù)據(jù)包。
tcpdump icmp
-
icmp6:捕獲所有 ICMPv6 數(shù)據(jù)包。
tcpdump icmp6
-
arp:捕獲所有 ARP 數(shù)據(jù)包。
tcpdump arp
-
rarp:捕獲所有 RARP 數(shù)據(jù)包。
tcpdump rarp
-
協(xié)議IP協(xié)議版本過濾
tcpdump ip #捕獲IPv4數(shù)據(jù)包 tcpdump ip6 #捕獲IPv6數(shù)據(jù)包tcpdump ip and tcp # 捕獲 IPv4 上的 TCP 數(shù)據(jù)包 tcpdump ip6 and tcp # 捕獲 IPv6 上的 TCP 數(shù)據(jù)包tcpdump ip host 192.168.1.1 # 捕獲特定 IPv4 地址的所有數(shù)據(jù)包 tcpdump ip6 host 2001:db8::1 # 捕獲特定 IPv6 地址的所有數(shù)據(jù)包tcpdump ip and udp # 捕獲 IPv4 上的 UDP 數(shù)據(jù)包 tcpdump ip6 and udp # 捕獲 IPv6 上的 UDP 數(shù)據(jù)包tcpdump 'ip and icmp' #捕獲IPv4的ICMP數(shù)據(jù)包: tcpdump 'ip6 and icmp6' #捕獲IPv6的ICMP數(shù)據(jù)包:tcpdump 'ip and net 192.168.1.0/24' #捕獲IPv4的指定網(wǎng)絡(luò)的數(shù)據(jù)包: tcpdump 'ip6 and net 2001:db8::/32' #捕獲IPv6的指定網(wǎng)絡(luò)的數(shù)據(jù)包:tcpdump 'ip and src 192.168.1.1 and dst port 443' -w ipv4_https_traffic.pcap #捕獲IPv4上指定源地址和目的端口的數(shù)據(jù)包,并保存到文件 tcpdump 'ip6 and src 2001:db8::1 and dst port 443' -vv#捕獲IPv6上指定源地址和目的端口的數(shù)據(jù)包,并顯示詳細(xì)信息
2. 地址相關(guān)的原子條件
-
host:捕獲來自或發(fā)送到指定主機(jī)的數(shù)據(jù)包。
tcpdump host 192.168.1.1
-
src host:捕獲來自指定源主機(jī)的數(shù)據(jù)包。
tcpdump src host 192.168.1.1
-
dst host:捕獲發(fā)送到指定目標(biāo)主機(jī)的數(shù)據(jù)包。
tcpdump dst host 192.168.1.2
-
net:捕獲來自或發(fā)送到指定網(wǎng)絡(luò)的數(shù)據(jù)包。
tcpdump net 192.168.1.0/24
-
src net:捕獲來自指定源網(wǎng)絡(luò)的數(shù)據(jù)包。
tcpdump src net 192.168.1.0/24
-
dst net:捕獲發(fā)送到指定目標(biāo)網(wǎng)絡(luò)的數(shù)據(jù)包。
tcpdump dst net 192.168.1.0/24
3. 端口相關(guān)的原子條件
-
port:捕獲指定端口的數(shù)據(jù)包。
tcpdump port 80
-
src port:捕獲來自指定源端口的數(shù)據(jù)包。
tcpdump src port 1024
-
dst port:捕獲發(fā)送到指定目標(biāo)端口的數(shù)據(jù)包。
tcpdump dst port 443
-
portrange:捕獲指定端口范圍的數(shù)據(jù)包。
tcpdump portrange 8000-8080
4. 網(wǎng)絡(luò)層和鏈路層(mac地址)原子條件
-
ether:捕獲以太網(wǎng)幀相關(guān)的數(shù)據(jù)包。
tcpdump ether
-
ether src:捕獲來自指定源 MAC 地址的數(shù)據(jù)包。
tcpdump ether src 00:11:22:33:44:55
-
ether dst:捕獲發(fā)送到指定目標(biāo) MAC 地址的數(shù)據(jù)包。
tcpdump ether dst 00:11:22:33:44:55
-
ether host:捕獲來自或發(fā)送到指定 MAC 地址的數(shù)據(jù)包。
tcpdump ether host 00:11:22:33:44:55
5. 廣播和多播
-
broadcast:捕獲所有廣播數(shù)據(jù)包。
tcpdump broadcast
-
multicast:捕獲所有多播數(shù)據(jù)包。
tcpdump multicast
6. VLAN 相關(guān)的原子條件
-
vlan:捕獲所有 VLAN 數(shù)據(jù)包。
tcpdump vlan
-
vlan [vlan_id]:捕獲指定 VLAN ID 的數(shù)據(jù)包。
tcpdump vlan 10
7. 特定字段大小過濾
-
less:捕獲小于指定字節(jié)長度的數(shù)據(jù)包。
tcpdump 'less 64'
-
greater:捕獲大于指定字節(jié)長度的數(shù)據(jù)包。
tcpdump 'greater 128'
8. 基于TCP標(biāo)記的過濾
- tcp-flags:捕獲具有特定 TCP 標(biāo)志的數(shù)據(jù)包。
- SYN:捕獲所有帶 SYN 標(biāo)志的數(shù)據(jù)包。
tcpdump 'tcp[tcpflags] & tcp-syn != 0'
- SYN-ACK:捕獲所有帶 SYN 和 ACK 標(biāo)志的數(shù)據(jù)包。
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'
- SYN:捕獲所有帶 SYN 標(biāo)志的數(shù)據(jù)包。
9. ICMP 類型過濾
- icmp[icmptype]:捕獲特定類型的 ICMP 數(shù)據(jù)包。
- echo request(ping 請求)
tcpdump 'icmp[icmptype] = icmp-echo'
- echo reply(ping 回復(fù))
tcpdump 'icmp[icmptype] = icmp-echoreply'
- echo request(ping 請求)
10. MPLS 過濾
-
mpls:捕獲所有 MPLS 數(shù)據(jù)包。
tcpdump 'mpls'
-
mpls [label]:捕獲指定 MPLS 標(biāo)簽的數(shù)據(jù)包。
tcpdump 'mpls 100'
11. PPPoE 過濾
- pppoes:捕獲所有 PPPoE 會話數(shù)據(jù)包。
tcpdump 'pppoes'
12. ISO OSI 過濾
-
iso:捕獲所有 ISO 網(wǎng)絡(luò)協(xié)議數(shù)據(jù)包。
tcpdump 'iso'
-
clnp:捕獲所有 CLNP(Connectionless Network Protocol)數(shù)據(jù)包。
tcpdump 'clnp'
13. Token Ring 過濾
-
tr:捕獲所有 Token Ring 數(shù)據(jù)包。
tcpdump 'tr'
-
tr [protocol]:捕獲指定 Token Ring 協(xié)議的數(shù)據(jù)包。
tcpdump 'tr 0x0800'
14. 帶寬過濾
-
tcp-keepalive:捕獲所有 TCP keepalive 數(shù)據(jù)包。
tcpdump 'tcp[tcpflags] & tcp-keepalive != 0'
-
tcp-segment:捕獲所有 TCP 段。
tcpdump 'tcp-segment'
@組合示例
-
捕獲所有來自 192.168.1.1 并發(fā)送到端口 80 的 TCP 數(shù)據(jù)包:
tcpdump 'src host 192.168.1.1 and dst port 80 and tcp'
-
捕獲所有 IPv4 和 IPv6 上的 HTTP 和 HTTPS 流量:
tcpdump '(ip or ip6) and (tcp port 80 or tcp port 443)'
-
捕獲所有來自網(wǎng)絡(luò) 192.168.1.0/24 的 UDP 數(shù)據(jù)包,但排除端口 53(DNS):
tcpdump 'src net 192.168.1.0/24 and udp and not port 53'
-
捕獲所有廣播和多播數(shù)據(jù)包:
tcpdump 'broadcast or multicast'
-
捕獲所有 VLAN 10 中大于 128 字節(jié)的 TCP 數(shù)據(jù)包:
tcpdump 'vlan 10 and tcp and greater 128'
-
捕獲所有帶 SYN 和 ACK 標(biāo)志的 IPv6 TCP 數(shù)據(jù)包:
tcpdump 'ip6 and tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'
-
捕獲所有 MPLS 標(biāo)簽為 100 的 UDP 數(shù)據(jù)包:
tcpdump 'mpls 100 and udp'
-
捕獲所有 PPPoE 會話中的 IPv4 數(shù)據(jù)包:
tcpdump 'pppoes and ip'
-
捕獲所有 ISO 網(wǎng)絡(luò)協(xié)議中的 CLNP 數(shù)據(jù)包:
tcpdump 'iso and clnp'
4.tcpdump常用選項
Ⅰ.基本選項
-
-i interface:指定要監(jiān)聽的網(wǎng)絡(luò)接口。
tcpdump -i eth0
- 默認(rèn)情況下,
tcpdump
會選擇第一個非環(huán)回接口。 - 可以通過
-D
選項列出所有接口:tcpdump -D
- 默認(rèn)情況下,
-
-c count:捕獲指定數(shù)量的數(shù)據(jù)包后停止。
tcpdump -c 100
-
-w file:將捕獲的數(shù)據(jù)包保存到文件。
tcpdump -w capture.pcap
-
-r file:從文件中讀取并分析數(shù)據(jù)包。
tcpdump -r capture.pcap
-
-nn:不將地址和端口轉(zhuǎn)換為名稱。
tcpdump -nn
-n
:不將地址轉(zhuǎn)換為名稱(主機(jī)名)。-nn
:不將地址和端口轉(zhuǎn)換為名稱。
-
-v, -vv, -vvv:設(shè)置詳細(xì)輸出的級別。
tcpdump -v # 較詳細(xì) tcpdump -vv # 更詳細(xì) tcpdump -vvv # 最詳細(xì)
-
-X:以十六進(jìn)制和 ASCII 格式顯示每個包的數(shù)據(jù)。
tcpdump -X
-
-e:顯示鏈路層頭信息。
tcpdump -e
-
-tt:顯示時間戳,不格式化。
tcpdump -tt
-
-ttt:顯示時間戳,以微秒為單位,相對于上一個數(shù)據(jù)包的時間差。
tcpdump -ttt
-
-tttt:顯示人類可讀的時間戳格式。
tcpdump -tttt
-
-s snaplen:設(shè)置數(shù)據(jù)包截取長度(捕獲的每個數(shù)據(jù)包的最大字節(jié)數(shù))。
tcpdump -s 128
- 默認(rèn)值為 68 或 96,足以捕獲 IP 和 TCP/UDP 頭
- 0 表示完整的數(shù)據(jù)包內(nèi)容
-
-A:以 ASCII 格式顯示數(shù)據(jù)包內(nèi)容。
tcpdump -A
-
-C file_size:設(shè)置捕獲文件的大小上限(以 MB 為單位),達(dá)到上限后創(chuàng)建新文件。
tcpdump -C 10 -w capture
-
-G seconds:設(shè)置捕獲文件的時間上限(以秒為單位),達(dá)到上限后創(chuàng)建新文件。
tcpdump -G 60 -w capture
-
-W file_count:設(shè)置保存捕獲文件的最大數(shù)量。
tcpdump -W 10 -G 60 -w capture
-
-E spi@ipaddr algo:secret:指定解密 IPsec 數(shù)據(jù)包的參數(shù)。
tcpdump -E 100@192.168.1.1 des3:0x0123456789ABCDEF
-
-Q:用于選擇捕獲的數(shù)據(jù)包的方向
tcpdump -Q directiontcpdump -Q in 'tcp' # 捕獲并顯示所有入方向的 TCP 數(shù)據(jù)包 tcpdump -Q out -w http_out.pcap 'tcp port 80' # 捕獲并保存出方向的 HTTP 流量到文件 tcpdump -Q inout -v 'icmp' # 捕獲所有入方向和出方向的 ICMP 數(shù)據(jù)包,并顯示詳細(xì)信息 tcpdump -Q in 'udp and host 192.168.1.100' # 捕獲特定主機(jī)的入方向 UDP 流量 tcpdump -Q out 'vlan 10' # 捕獲 VLAN 10 的出方向數(shù)據(jù)包
in:僅捕獲入方向的數(shù)據(jù)包(接收的數(shù)據(jù)包)。
out:僅捕獲出方向的數(shù)據(jù)包(發(fā)送的數(shù)據(jù)包)。
inout:捕獲入方向和出方向的數(shù)據(jù)包(所有數(shù)據(jù)包)。
Ⅱ.高級選項
-
-B buffer_size:設(shè)置捕獲緩沖區(qū)大小(以 KB 為單位)。
tcpdump -B 4096
-
-K:禁用數(shù)據(jù)包的校驗和驗證。
tcpdump -K
-
-S:顯示絕對序列號(對于 TCP 數(shù)據(jù)包)。
tcpdump -S
-
-j tstamp_type:設(shè)置數(shù)據(jù)包時間戳類型。
tcpdump -j adapter
-
-l:將標(biāo)準(zhǔn)輸出設(shè)置為行緩沖模式。
tcpdump -l
-
-U:實時寫入捕獲文件。
tcpdump -U -w capture.pcap
-
-Z user:在捕獲文件打開后切換用戶。
tcpdump -Z nobody
-
-F file:從文件中讀取過濾表達(dá)式。
tcpdump -F filter_file
@組合選項示例
-
捕獲并保存所有 TCP 數(shù)據(jù)包,保存到文件,文件大小上限為 10 MB,每 60 秒切換文件,最多保存 5 個文件:
tcpdump -i eth0 -w capture -C 10 -G 60 -W 5 tcp
-
以詳細(xì)模式捕獲端口 80 上的 HTTP 流量,并顯示數(shù)據(jù)包內(nèi)容的 ASCII 和十六進(jìn)制格式:
tcpdump -i eth0 -vv -X port 80
-
捕獲 VLAN 10 中的所有數(shù)據(jù)包,并將標(biāo)準(zhǔn)輸出設(shè)置為行緩沖模式:
tcpdump -i eth0 -l vlan 10
-
捕獲并解密 IPsec 數(shù)據(jù)包,使用指定的密鑰:
tcpdump -i eth0 -E 100@192.168.1.1 des3:0x0123456789ABCDEF
-
設(shè)置捕獲緩沖區(qū)大小為 4 MB,并捕獲所有 UDP 數(shù)據(jù)包:
tcpdump -i eth0 -B 4096 udp
@綜合示例
詳解篇
下面是一些綜合使用 tcpdump
選項、原子條件和邏輯運(yùn)算符的示例,這些示例展示了如何結(jié)合這些元素來實現(xiàn)復(fù)雜的捕獲和分析需求。
示例 1:捕獲特定主機(jī)的 HTTP GET 請求并保存到文件
tcpdump -i eth0 -A -s 0 -w http_get_requests.pcap 'tcp port 80 and (((ip[2:2] - ((ip[0] & 0xf)<<2)) - ((tcp[12] & 0xf0)>>2)) != 0) and tcp[((tcp[12] & 0xf0)>>2):4] = 0x47455420 and host 192.168.1.100'
- -i eth0:指定網(wǎng)絡(luò)接口 eth0。
- -A:以 ASCII 格式顯示數(shù)據(jù)包內(nèi)容。
- -s 0:捕獲完整的數(shù)據(jù)包。
- -w http_get_requests.pcap:將數(shù)據(jù)包保存到文件。
- ‘tcp port 80 and … and host 192.168.1.100’:過濾條件,捕獲特定主機(jī)的 HTTP GET 請求。
- ip[2:2]:IP 數(shù)據(jù)包的總長度字段(2 個字節(jié)),IP 頭部的第 2 和第 3 字節(jié)表示數(shù)據(jù)包的總長度。
- ip[0] & 0xf:IP 頭長度字段。IP 頭部的第 1 字節(jié)的低 4 位表示 IP 頭的長度(單位是 32 位字)
- tcp[12] & 0xf0:TCP 頭長度字段。TCP 頭部的第 13 字節(jié)的高 4 位表示 TCP 頭的長度(單位是 32 位字)
- 0x47455420:ASCII 碼 "GET " 的十六進(jìn)制表示。
示例 2:捕獲 VLAN 10 中所有的 TCP SYN 數(shù)據(jù)包,并顯示詳細(xì)信息
tcpdump -i eth0 -nn -vv 'vlan 10 and tcp[tcpflags] & tcp-syn != 0'
- -i eth0:指定網(wǎng)絡(luò)接口 eth0。
- -nn:不解析主機(jī)名和端口號。
- -vv:顯示詳細(xì)的包頭信息。
- ‘vlan 10 and tcp[tcpflags] & tcp-syn != 0’:過濾條件,捕獲 VLAN 10 中所有 TCP SYN 數(shù)據(jù)包。
示例 3:捕獲所有入方向的 ICMP 數(shù)據(jù)包,并顯示數(shù)據(jù)包內(nèi)容
tcpdump -i eth0 -Q in -X 'icmp'
- -i eth0:指定網(wǎng)絡(luò)接口 eth0。
- -Q in:捕獲入方向的數(shù)據(jù)包。
- -X:以十六進(jìn)制和 ASCII 格式顯示數(shù)據(jù)包內(nèi)容。
- ‘icmp’:過濾條件,捕獲所有 ICMP 數(shù)據(jù)包。
示例 4:捕獲所有源 MAC 地址為特定地址的 TCP FIN 數(shù)據(jù)包
tcpdump -i eth0 'ether src 00:11:22:33:44:55 and tcp[tcpflags] & tcp-fin != 0'
- -i eth0:指定網(wǎng)絡(luò)接口 eth0。
- ‘ether src 00:11:22:33:44:55 and tcp[tcpflags] & tcp-fin != 0’:過濾條件,捕獲所有源 MAC 地址為特定地址的 TCP FIN 數(shù)據(jù)包。
示例 5:捕獲并顯示特定 IP 地址的 UDP 流量,包括十六進(jìn)制內(nèi)容
tcpdump -i eth0 -nn -X 'udp and host 192.168.1.100'
- -i eth0:指定網(wǎng)絡(luò)接口 eth0。
- -nn:不解析主機(jī)名和端口號。
- -X:以十六進(jìn)制和 ASCII 格式顯示數(shù)據(jù)包內(nèi)容。
- ‘udp and host 192.168.1.100’:過濾條件,捕獲特定 IP 地址的 UDP 流量。
示例 6:捕獲 HTTP POST 請求,并顯示數(shù)據(jù)包內(nèi)容
tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0] & 0xf)<<2)) - ((tcp[12] & 0xf0)>>2)) != 0) and tcp[((tcp[12] & 0xf0)>>2):4] = 0x504f5354'
- -i eth0:指定網(wǎng)絡(luò)接口 eth0。
- -A:以 ASCII 格式顯示數(shù)據(jù)包內(nèi)容。
- -s 0:捕獲完整的數(shù)據(jù)包。
- ‘tcp port 80 and …’:過濾條件,捕獲 HTTP POST 請求。
示例 7:捕獲特定端口范圍的 UDP 流量,并設(shè)置捕獲緩沖區(qū)大小
tcpdump -i eth0 -B 4096 'udp portrange 8000-8080'
- -i eth0:指定網(wǎng)絡(luò)接口 eth0。
- -B 4096:設(shè)置捕獲緩沖區(qū)大小為 4 MB。
- ‘udp portrange 8000-8080’:過濾條件,捕獲特定端口范圍的 UDP 流量。
示例 8:捕獲所有 TCP 連接終止過程中的數(shù)據(jù)包(包括 FIN 和 RST 數(shù)據(jù)包)
tcpdump -i eth0 'tcp[tcpflags] & (tcp-fin|tcp-rst) != 0'
- -i eth0:指定網(wǎng)絡(luò)接口 eth0。
- ‘tcp[tcpflags] & (tcp-fin|tcp-rst) != 0’:過濾條件,捕獲所有 TCP 連接終止過程中的數(shù)據(jù)包。
簡潔篇
示例 1:捕獲 HTTP 和 HTTPS 流量并保存到文件
需求:捕獲所有通過端口 80 和 443 的 HTTP 和 HTTPS 流量,將捕獲的數(shù)據(jù)包保存到文件 http_https_traffic.pcap
,每個文件的大小上限為 10 MB,每 60 秒切換文件,最多保存 5 個文件。
tcpdump -i eth0 -w http_https_traffic.pcap -C 10 -G 60 -W 5 'tcp port 80 or tcp port 443'
示例 2:捕獲特定網(wǎng)絡(luò)內(nèi)的所有 TCP 數(shù)據(jù)包,并顯示詳細(xì)信息
需求:捕獲來自網(wǎng)絡(luò) 192.168.1.0/24
的所有 TCP 數(shù)據(jù)包,顯示詳細(xì)的包頭信息和內(nèi)容。
tcpdump -i eth0 -nn -vv -X 'tcp and net 192.168.1.0/24'
示例 3:捕獲并解密 IPsec 流量
需求:捕獲并解密 IPsec 數(shù)據(jù)包,使用特定的密鑰進(jìn)行解密。
tcpdump -i eth0 -E 100@192.168.1.1 des3:0x0123456789ABCDEF 'esp'
示例 4:捕獲并實時顯示所有包含特定字符串的 HTTP 流量
需求:捕獲并實時顯示所有 HTTP 流量,并在包內(nèi)容中搜索特定字符串 “password”。
tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0) and tcp[((tcp[12]&0xf0)>>2):4] = 0x70617373'
示例 5:捕獲所有帶有 SYN 和 ACK 標(biāo)志的 TCP 數(shù)據(jù)包
需求:捕獲所有帶有 SYN 和 ACK 標(biāo)志的 TCP 數(shù)據(jù)包,以監(jiān)視網(wǎng)絡(luò)中的新連接建立。
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'
示例 6:捕獲特定 VLAN 中的 ICMP 數(shù)據(jù)包,并將輸出顯示為 ASCII 格式
需求:捕獲 VLAN ID 為 10 的所有 ICMP 數(shù)據(jù)包,并以 ASCII 格式顯示包內(nèi)容。
tcpdump -i eth0 -A 'vlan 10 and icmp'
示例 7:捕獲特定端口范圍的 UDP 流量,并設(shè)置捕獲緩沖區(qū)大小
需求:捕獲端口范圍 8000 到 8080 的所有 UDP 流量,并將捕獲緩沖區(qū)大小設(shè)置為 4 MB,以防止丟包。
tcpdump -i eth0 -B 4096 'udp portrange 8000-8080'
示例 8:捕獲并顯示時間戳差異的 TCP 數(shù)據(jù)包
需求:捕獲所有 TCP 數(shù)據(jù)包,并顯示數(shù)據(jù)包之間的時間戳差異,以微秒為單位。
tcpdump -i eth0 -ttt 'tcp'
示例 9:捕獲來自特定主機(jī)的 DNS 查詢和響應(yīng)
需求:捕獲來自主機(jī) 192.168.1.1
的所有 DNS 查詢和響應(yīng)。
tcpdump -i eth0 'host 192.168.1.1 and port 53'
示例 10:捕獲所有廣播和多播數(shù)據(jù)包,并顯示鏈路層信息
需求:捕獲所有廣播和多播數(shù)據(jù)包,并顯示鏈路層頭信息。
tcpdump -i eth0 -e '(broadcast or multicast)'
總結(jié)
- 選項順序:在命令行中,選項通常出現(xiàn)在過濾條件之前。
- 過濾條件的使用:過濾條件需要用單引號
'
或雙引號"
包圍,以避免 shell 對其進(jìn)行錯誤解析。 - 捕獲緩沖區(qū):使用
-B
選項設(shè)置捕獲緩沖區(qū)大小,以防止丟包。 - 對于http: 使用 -A 選項是以 ASCII 格式顯示數(shù)據(jù)包的內(nèi)容。因為 HTTP 是一種基于文本的協(xié)議,其請求和響應(yīng)內(nèi)容都是可讀的文本。通過使用 -A 選項,可以直接在終端中看到 HTTP 請求和響應(yīng)的詳細(xì)內(nèi)容
- 更為復(fù)雜的話,可以使用tcpdump保存抓包文件,然后Linux版本的tshark圖形化頁面分析和過濾