tcpdump命令

tcpdump 命令 #

tcpdump是一个强大的命令行数据包分析工具,用于捕获和分析网络流量。它可以捕获经过特定网络接口的数据包,并根据各种条件进行过滤和显示。

语法 #

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

常用选项 #

选项 描述
-i 接口 指定要监听的网络接口,使用any监听所有接口
-n 不将地址解析为主机名
-nn 不将协议和端口号解析为名称
-X 以十六进制和 ASCII 格式显示数据包内容
-XX 以十六进制和 ASCII 格式显示包括以太网头部在内的数据包内容
-v, -vv, -vvv 增加详细程度
-c 数量 捕获指定数量的数据包后退出
-s 大小 设置每个数据包的快照长度(默认为 262144 字节)
-S 打印绝对 TCP 序列号
-w 文件 将原始数据包写入文件而不是解析和打印
-r 文件 从文件读取数据包而不是从网络接口
-A 以 ASCII 格式打印每个数据包
-D 列出可用的网络接口
-l 使输出行缓冲(适用于通过管道传输到其他程序)
-q 快速输出,打印较少的协议信息
-t 不打印时间戳
-tttt 打印可读的时间戳

过滤表达式 #

tcpdump使用 Berkeley 包过滤器(BPF)语法来过滤数据包。以下是一些常用的过滤表达式:

按协议过滤 #

tcpdump tcp        # 只捕获TCP数据包
tcpdump udp        # 只捕获UDP数据包
tcpdump icmp       # 只捕获ICMP数据包

按主机过滤 #

tcpdump host 192.168.1.1        # 捕获与特定主机相关的流量
tcpdump src 192.168.1.1         # 捕获来自特定源IP的流量
tcpdump dst 192.168.1.1         # 捕获发往特定目标IP的流量

按端口过滤 #

tcpdump port 80                 # 捕获与特定端口相关的流量
tcpdump src port 80             # 捕获来自特定源端口的流量
tcpdump dst port 80             # 捕获发往特定目标端口的流量

组合过滤器 #

tcpdump tcp and port 80         # 捕获TCP协议且端口为80的流量
tcpdump tcp and src 192.168.1.1 and port 80  # 捕获来自192.168.1.1且TCP端口为80的流量
tcpdump 'tcp and (port 80 or port 443)'      # 捕获TCP协议且端口为80或443的流量

按数据包内容过滤 #

tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'  # 捕获SYN或FIN标志设置的TCP数据包
tcpdump 'tcp[tcpflags] == tcp-syn'                # 只捕获SYN数据包(TCP连接请求)
tcpdump 'tcp[tcpflags] == tcp-ack'                # 只捕获ACK数据包

常见用法 #

1. 捕获特定接口上的所有流量 #

tcpdump -i eth0

2. 捕获特定主机的流量 #

tcpdump host 192.168.1.1

3. 捕获特定端口的流量 #

tcpdump port 80

4. 将捕获的数据包保存到文件 #

tcpdump -w capture.pcap -i eth0

5. 从文件读取捕获的数据包 #

tcpdump -r capture.pcap

6. 显示 HTTP 请求头 #

tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

7. 捕获 DNS 流量 #

tcpdump -i any udp port 53

8. 捕获 SSH 流量 #

tcpdump -i any tcp port 22

9. 捕获特定网络的流量 #

tcpdump net 192.168.0.0/24

10. 以可读格式显示时间戳和详细信息 #

tcpdump -tttt -v -i eth0

输出解释 #

tcpdump的典型输出格式如下:

[时间戳] [协议] [源地址.端口] > [目标地址.端口]: [标志], [序列号], [确认号], [窗口大小] [选项]

例如:

14:35:22.123456 IP 192.168.1.5.56789 > 93.184.216.34.80: Flags [S], seq 1902731534, win 64240, options [mss 1460,sackOK,TS val 1800993937 ecr 0,nop,wscale 7], length 0

注意事项 #

  • tcpdump通常需要 root 权限或 CAP_NET_RAW 能力才能捕获数据包
  • 在高流量网络上使用tcpdump可能会产生大量输出,建议使用过滤器限制捕获的数据包
  • 使用-w选项保存捕获的数据包,然后可以使用 Wireshark 等工具进行更详细的分析
  • 在生产环境中使用时,应注意tcpdump可能会影响系统性能
  • 捕获敏感流量时,应注意数据安全和隐私问题