[Linux] [网络] tcpdump实现网络抓包和分析

修订时间:2025年10月19日22:25:09

参考:

  1. Linux实用工具 之 tcpdump,网络抓包分析的瑞士军刀(现代CPP随笔_0CCh
  2. DeepSeek
  3. 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

image

3.2 查看十六进制和ASCII

# -X:同时显示十六进制和ASCII格式
# -s 0: 避免截断
tcpdump -i eth0 -s 0 port 80 -X

image

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
posted on 2025-02-10 00:25  风惊庭前叶  阅读(36)  评论(0)    收藏  举报