跳到主要内容
18:54:35
🔅🔆

tcpdump命令

tcpdump github

tcpdump官网

基本介绍​

说明

tcpdump 是一个功能强大的命令行网络数据包分析工具,用于捕获和分析网络流量。它可以捕获经过网络接口的数据包,并显示这些包的头部信息或内容

基本语法​

tcpdump [选项] [过滤表达式]

常用选项参数​

基本选项​

选项描述示例
-i指定网络接口tcpdump -i eth0
-n不解析主机名tcpdump -n
-nn不解析主机名和端口tcpdump -nn
-c指定捕获数据包的数量tcpdump -c 10
-s指定每个数据包的截断长度tcpdump -s 0 (不截断)
-X以十六进制和ASCII格式显示包内容tcpdump -X
-XX以十六进制和ASCII格式显示包内容(包括以太网头)tcpdump -XX
-v详细模式tcpdump -v
-vv更详细模式tcpdump -vv
-vvv最详细模式tcpdump -vvv
-S打印绝对的序列号tcpdump -S
-q简洁模式,输出较少协议信息tcpdump -q
-t不显示时间戳tcpdump -t
-tt显示无格式的时间戳tcpdump -tt
-ttt显示相对时间戳tcpdump -ttt
-tttt显示默认格式的日期和时间tcpdump -tttt

输出选项​

选项描述示例
-w将数据包写入文件tcpdump -w capture.pcap
-r从文件读取数据包tcpdump -r capture.pcap
-A以ASCII格式显示包内容tcpdump -A
-l行缓冲模式tcpdump -l
-D列出可用的网络接口tcpdump -D
-e显示链路层头部tcpdump -e
-p不进入混杂模式tcpdump -p
-K不验证TCP校验和tcpdump -K

BPF过滤选项​

选项描述示例
-F从文件读取过滤表达式tcpdump -F filter.txt
-G每N秒轮换一次输出文件tcpdump -G 60 -w file%Y%m%d%H%M%S.pcap
-z在轮换输出文件后执行命令tcpdump -z gzip -G 60 -w file%Y%m%d%H%M%S.pcap

过滤表达式​

协议过滤​

表达式描述示例
ip捕获IP包tcpdump ip
tcp捕获TCP包tcpdump tcp
udp捕获UDP包tcpdump udp
icmp捕获ICMP包tcpdump icmp
arp捕获ARP包tcpdump arp
not否定表达式tcpdump not arp
and与运算tcpdump tcp and udp
or或运算tcpdump tcp or udp

地址与端口过滤​

表达式描述示例
host指定主机tcpdump host 192.168.1.1
src指定源地址tcpdump src 192.168.1.1
dst指定目标地址tcpdump dst 192.168.1.1
net指定网络tcpdump net 192.168.1.0/24
port指定端口tcpdump port 80
src port指定源端口tcpdump src port 80
dst port指定目标端口tcpdump dst port 80
portrange指定端口范围tcpdump portrange 20-30

包大小过滤​

表达式描述示例
greater大于指定大小的包tcpdump greater 1000
less小于指定大小的包tcpdump less 1000

TCP标志过滤​

表达式描述示例
tcp[tcpflags]过滤TCP标志tcpdump 'tcp[tcpflags] & (tcp-syn) != 0'
tcp-synSYN标志tcpdump 'tcp[tcpflags] & tcp-syn != 0'
tcp-ackACK标志tcpdump 'tcp[tcpflags] & tcp-ack != 0'
tcp-finFIN标志tcpdump 'tcp[tcpflags] & tcp-fin != 0'
tcp-rstRST标志tcpdump 'tcp[tcpflags] & tcp-rst != 0'
tcp-pshPSH标志tcpdump 'tcp[tcpflags] & tcp-psh != 0'
tcp-urgURG标志tcpdump 'tcp[tcpflags] & tcp-urg != 0'

实用示例​

基本捕获​

# 捕获所有流量
tcpdump -i eth0

# 捕获10个包
tcpdump -c 10 -i eth0

# 捕获包含完整内容的包
tcpdump -s 0 -i eth0

# 捕获并保存到文件
tcpdump -w capture.pcap -i eth0

# 从文件读取并显示
tcpdump -r capture.pcap

过滤特定主机和端口​

# 捕获与特定主机相关的流量
tcpdump host 192.168.1.1

# 捕获特定源主机的流量
tcpdump src host 192.168.1.1

# 捕获特定目标主机的流量
tcpdump dst host 192.168.1.1

# 捕获特定端口的流量
tcpdump port 80

# 捕获特定源端口的流量
tcpdump src port 80

# 捕获特定目标端口的流量
tcpdump dst port 80

# 捕获特定端口范围的流量
tcpdump portrange 20-30

复杂过滤条件​

# 捕获特定主机的HTTP流量
tcpdump -i eth0 host 192.168.1.1 and port 80

# 捕获除ARP和ICMP之外的所有流量
tcpdump -i eth0 not arp and not icmp

# 捕获特定网络内的SSH流量
tcpdump -i eth0 net 192.168.1.0/24 and port 22

# 捕获TCP SYN包(TCP连接建立)
tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'

# 捕获TCP SYN+ACK包(TCP连接确认)
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)'

# 捕获具有特定内容的HTTP请求
tcpdump -i eth0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

高级输出选项​

# 显示详细信息
tcpdump -v -i eth0

# 显示十六进制和ASCII格式
tcpdump -X -i eth0

# 显示详细时间戳
tcpdump -tttt -i eth0

# 每60秒创建一个新的捕获文件
tcpdump -G 60 -w file%Y%m%d%H%M%S.pcap -i eth0

# 捕获并实时压缩
tcpdump -z gzip -G 60 -w file%Y%m%d%H%M%S.pcap -i eth0

查看特定协议流量​

# 查看DNS流量
tcpdump -i eth0 udp port 53

# 查看HTTP流量
tcpdump -i eth0 -A tcp port 80

# 查看HTTPS流量
tcpdump -i eth0 tcp port 443

# 查看特定VLAN的流量
tcpdump -i eth0 vlan 10

# 查看NTP流量
tcpdump -i eth0 udp port 123

混合示例​

# 捕获HTTP GET请求
tcpdump -i eth0 -A 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420)'

# 捕获IP分片
tcpdump -i eth0 'ip[6:2] & 0x1fff != 0'

# 捕获特定长度的包
tcpdump -i eth0 'len > 1000'

# 捕获特定MAC地址的包
tcpdump -i eth0 ether host 00:11:22:33:44:55

# 捕获特定网站的流量
tcpdump -i eth0 'host example.com'

特殊用法​

时间戳和轮换​

# 使用UTC时间戳
tcpdump -tttt -i eth0

# 按指定时间轮换文件并压缩
tcpdump -i eth0 -G 3600 -w 'file-%Y-%m-%d-%H.pcap' -z gzip

组合过滤器​

# 捕获特定主机的HTTP或HTTPS流量
tcpdump -i eth0 'host 192.168.1.1 and (port 80 or port 443)'

# 捕获除某个主机外的所有ICMP流量
tcpdump -i eth0 'icmp and not host 192.168.1.1'

调试和优化​

# 检查不同接口的可用性
tcpdump -D

# 使用行缓冲并通过管道传递给其他命令
tcpdump -l -i eth0 | grep "SYN"

# 仅捕获TCP握手
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn|tcp-fin|tcp-rst) != 0'

性能考虑​

  • 对于高流量环境,使用更精确的过滤器减少CPU负载

  • 使用 -s 0 捕获完整包内容可能会影响性能

  • 在高负载环境中,考虑将捕获结果写入文件后再分析

  • 使用 -B 选项增加捕获缓冲区大小(例如:-B 4096)可减少丢包

安全考虑​

  • 运行 tcpdump 通常需要 root 权限

  • 在生产环境使用时应谨慎,可能会影响网络性能

  • 捕获的数据可能包含敏感信息,注意文件的安全存储和处理

  • 使用 -p 选项可以禁用混杂模式,只捕获发送到本机的数据包

🛡️本站已安全运行2285天09时29分31秒
Bottom GIF
Top GIF