修订时间:2025年10月19日22:25:09
参考:
- Linux实用工具 之 tcpdump,网络抓包分析的瑞士军刀(现代CPP随笔_0CCh
- DeepSeek
- Kimi
目录
01 抓包监听
1.1 监听网卡全部流量
- -i:指定网卡
# 监听指定网卡eth0的所有流量
tcpdump -i eth0
02 过滤
2.1 端口过滤
- port:过滤端口
# 只查看80端口(HTTP)的流量
tcpdump -i eth0 port 80
- 端口组合:同时监听多个端口
# 监听80和443端口的数据(http和https)
tcpdump -i eth0 port 80 or port 443
- range:端口范围过滤
# 过滤端口范围 1024 到 65535 的流量
tcpdump -i eth0 port range 1024-65535
2.2 IP过滤
- host:指定主机ip
# 查看与特定主机(192.168.1.100)的所有通信
tcpdump -i eth0 host 192.168.1.100
- dst:指定目标ip
# 过滤发送到目标主机(192.168.1.100)的流量
tcpdump -i eth0 dst host 192.168.1.100
- src:指定来源ip
# 过滤来自(192.168.1.100)的流量
tcpdump -i eth0 src host 192.168.1.100
- net:网络过滤
# 过滤与 192.168.1.0/24 子网相关的所有流量
tcpdump -i eth0 net 192.168.1.0/24
2.3 协议过滤
# HTTP/HTTPS
tcpdump -i eth0 port 80 or port 443
# DNS查询
tcpdump -i eth0 port 53
# ICMP(ping命令)
tcpdump -i eth0 icmp
# SSH连接
tcpdump -i eth0 port 22
# 数据库
tcpdump -i eth0 port 3306 or port 5432 # MySQL或PostgreSQL
2.4 TCP flag过滤
# Flag,含义
# tcp[13] & 0x02 != 0,过滤 SYN 包(连接请求)
# tcp[13] & 0x04 != 0,过滤 RST 包(连接重置)
# tcp[13] & 0x10 != 0,过滤 ACK 包(确认)
# tcp[13] & 0x01 != 0,过滤 FIN 包(正常关闭)
# 过滤所有 SYN 包(例如用于查看 SYN Flood 攻击或连接尝试)
tcpdump -i eth0 'tcp[13] & 2 != 0'
2.5 组合过滤
# 查看80端口的HTTP流量或ICMP(ping)流量
tcpdump -i eth0 "port 80 or icmp" -A
# 查看特定主机到特定端口的流量
tcpdump -i eth0 "host 192.168.1.100 and port 80"
03 查看内容
3.1 查看文本内容
# -A:以ASCII显示数据内容(适合查看文本协议)
# -s 0: 避免截断
tcpdump -i -s 0 eth0 port 80 -A
3.2 查看十六进制和ASCII
# -X:同时显示十六进制和ASCII格式
# -s 0: 避免截断
tcpdump -i eth0 -s 0 port 80 -X
04 输出控制选项
4.1 详细程度
# -v:详细输出
tcpdump -i eth0 -v
# -vv:更详细输出
tcpdump -i eth0 -vv
# -vvv:最详细输出
tcpdump -i eth0 -vvv
4.4 输出时间
# 选项,描述
# 无,默认,精确到微秒,但无日期
# -t,不显示时间戳
# -tt,Unix 时间戳(从 Epoch 开始的秒数)
# -ttt,显示与前一个包的时间间隔(微秒)
# -tttt,标准日期和时间格式(常用)
# -ttttt,显示与前一个包的累计时间间隔(微秒)
# 以标准日期时间格式显示,方便日志分析
tcpdump -i eth0 -tttt
4.3 不做名称解析
# 不解析主机名(加快显示)
tcpdump -i eth0 -n
# 不解析端口服务名
tcpdump -i eth0 -nn
05 读写文件
5.1 写入文件
# -w: 写入目标文件
tcpdump -i eth0 -w capture.pcap # 写入文件capture.pcap
5.2 读取文件
# -r: 读取文件
tcpdump -r capture.pcap # 读取文件caputre.pcap
5.3 读取文件并且过滤
tcpdump -r capture.pcap port 80 # 读取文件capture.pcap并且过滤80端口
06 数量与时间控制
6.1 限制数量
# -c:限制抓包数量
tcpdump -i eth0 -c 10 # 只抓10个包
6.2 写入文件轮转
# -G:按时间间隔轮转文件(单位:秒)
tcpdump -i eth0 -G 3600 -w capture_%H.pcap # 每小时一个文件
6.3 限制写入文件最大数量
# -W:限制文件数量
tcpdump -i eth0 -W 24 -G 3600 -w 'capture_%H.pcap' # 保留24个文件
07 权限管理
7.1 root全项
# 常规抓包需要root权限
sudo tcpdump -i eth0
7.2 授予用户权限
# 给用户授予抓包权限
sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump