TCPDump抓包命令详解:网络分析的强大工具

目录

[一. 安装 TCPDump](#一. 安装 TCPDump)

[二. 常用参数](#二. 常用参数)

[三. 过滤表达式](#三. 过滤表达式)

基于协议的过滤:

基于地址的过滤:

基于端口的过滤:

逻辑操作符:

基于数据包内容的过滤:

基于时间戳的过滤:

基于MAC地址的过滤:

基于VLAN的过滤:

基于TCP标志的过滤:

基于IP选项的过滤:

四、实例


在网络管理和故障排除中,实时监控和分析网络流量是至关重要的。TCPDump 是一个强大的命令行工具,它允许用户捕获和分析通过网络接口的原始数据包。本文将详细介绍如何在 CentOS 操作系统中安装和使用 TCPDump,以及如何通过它来诊断和解决网络问题。

一. 安装 TCPDump

在 CentOS 中安装 TCPDump 非常简单。

安装 TCPDump:

复制代码
yum install tcpdump -y

安装完成后,你可以通过输入 tcpdump 来验证安装是否成功:

复制代码
tcpdump --version

二. 常用参数

参数 描述
-a 尝试将网络和广播地址转换成名称。
-A 以 ASCII 码方式显示每一个数据包 (去除链路层头后),方便查看应用层的数据。
-b 在 ARPA Internet 协议上同时显示数据包匹配和数据链路层头。
-B 设置操作系统捕获缓冲区大小。
-c 收到指定的数据包数目后,TCPDump 就会停止。
-C 在保存数据包之前检查文件大小,如果超过指定大小则新建文件。
-d 将编译过的数据包匹配代码以人们能够理解的汇编格式输出。
-dd 以 C 语言形式输出数据包匹配代码。
-ddd 以十进制数形式输出数据包匹配代码。
-D 列出可用于抓包的接口。
-e 在输出行打印出数据链路层头部信息。
-E 指定解密 IPSEC 流量的方法。
-f 将外部的 Internet 地址以数字形式打印出来。
-F 使用文件作为过滤表达式的输入,忽略命令行上的表达式。
-G 如果文件名可以被时间戳替换,允许单个文件保存多个抓包结果。
-h 获取 TCPDump 的帮助信息。
-H 尝试检测 802.11s 草案网状网络。
-i 监听指定的网络接口。
-I 将网络接口置于无监控模式,用于 802.11 无线网络。
-j 设置抓包的时间戳类型为"jiffies"。
-J 列出支持的时间戳类型。
-k 显示数据包时强制显示时间戳。
-K 不验证 IP、TCP 或 UDP 校验和。
-L 列出网络接口的已知数据链路类型。
-m 从文件模块中加载 SMI MIB 模块定义。
-M 如果可能,使用指定的共享库或本地的办法来快速缓存会话密钥。
-n 不把网络地址转换成名字。
-N 不打印主机名的域名限定,如 hostname.localdomain。
-O 不运行数据包匹配代码优化器,如果怀疑优化器有 bug 可以使用这个选项。
-p 不让网络接口进入混杂模式。
-q 快速输出,打印较少的协议信息,输出行会比较短。
-r 从指定的文件中读取数据包。
-R 设定 TCPDump 的默认历史数据包匹配行为为不匹配。
-s 设置数据包捕获长度。
-S 打印 TCP 的绝对序列号而不是相对序列号。
-t 在输出的每一行不打印时间戳。
-tt 在每一行中输出非格式化的时间戳。
-T 将指定的数据包强制解释为指定的类型。
-U 使 -w 选项产生的数据包数据文件以 packet-buffered 方式写入,类似于实时数据流。
-v 输出稍微详细的信息,例如显示 IP 数据包中的生存时间,标识,总长度。
-vv 输出更详细的信息。
-vvv 输出非常详细的信息。
-w 将捕获的数据包直接写入文件而不是显示出来。
-W 限制文件数量。
-x 以十六进制和 ASCII 码形式打印出每个数据包 (去掉链路层头部),但不包括连接层。
-X 以十六进制和 ASCII 码形式打印出每个数据包 (去掉链路层头部),也包括连接层。
-Y 使用数据链路层匹配代码,即使这可能导致不正确的分片。
-z 修改各种数据包和文件输出统计的计数器。
-Z 改变用户 ID 或组 ID 到指定的用户或组。

这些选项允许用户根据需要调整 TCPDump 的行为,从而进行更精确的网络数据包捕获和分析。请注意,使用某些选项可能需要特定的权限或系统配置,且不同版本的 TCPDump 可能支持的选项有所不同。

三. 过滤表达式

基于协议的过滤:

  • tcp: 过滤 TCP 协议数据包。
  • udp: 过滤 UDP 协议数据包。
  • icmp: 过滤 ICMP 协议数据包。
  • arp: 过滤 ARP 协议数据包。
  • ip: 过滤 IP 协议数据包。
  • ether: 过滤以太网帧。
  • wlan: 过滤无线局域网数据包。

基于地址的过滤:

  • host: 过滤特定主机的数据包。例如 host 192.168.1.100。
  • net: 过滤特定网络的数据包。例如 net 192.168.1.0/24。
  • port: 过滤特定端口的数据包。例如 port 80。
  • src 和 dst: 分别过滤源地址和目的地址的数据包。例如 src 192.168.1.100 或 dst 192.168.1.100。

基于端口的过滤:

  • tcp port: 过滤特定 TCP 端口的数据包。例如 tcp port 80。
  • udp port: 过滤特定 UDP 端口的数据包。例如 udp port 53。

逻辑操作符:

  • and: 同时满足两个条件。例如 host 192.168.1.100 and tcp port 80。
  • or: 满足任一条件。例如 host 192.168.1.100 or host 192.168.1.101。
  • not 或 !: 排除满足条件的数据包。例如 not host 192.168.1.100。

基于数据包内容的过滤:

  • contains: 检查数据包是否包含特定字符串。例如 tcp[20:] contains "GET"。
  • less, greater: 比较数据包长度。例如 less 1500。
  • =, !=, >, <: 比较操作符,用于 IP 地址、端口号等。

基于时间戳的过滤:

  • less, greater: 基于时间戳的比较。

基于MAC地址的过滤:

  • ether host: 过滤特定 MAC 地址的数据包。例如 ether host 00:11:22:33:44:55。

基于VLAN的过滤:

  • vlan: 过滤特定 VLAN 的数据包。例如 vlan 10。

基于TCP标志的过滤:

  • tcp flags: 基于 TCP 标志位过滤。例如 tcp[tcpflags] & tcp-syn != 0。
复制代码
#### **基于IP选项的过滤**:

* `ip options`: 基于 IP 选项过滤。

这些过滤方式可以组合使用,以实现更复杂的过滤逻辑。

例如,tcpdump host 192.168.1.100 and tcp port 80 将捕获来自或发往 192.168.1.100 且端口为 80 的 TCP 数据包。通过灵活运用这些过滤表达式,可以有效地捕获和分析网络中的特定流量。

四、实例

1. 捕获特定主机的所有流量:

复制代码
tcpdump host 192.168.1.100

这个命令将捕获所有源或目的地址为 192.168.1.100 的数据包。

2. 捕获特定端口的流量:

复制代码
tcpdump port 80

这个命令将捕获所有端口为 80(通常是 HTTP 服务)的数据包。

3. 捕获特定协议的流量:

复制代码
tcpdump tcp

这个命令将捕获所有 TCP 协议的数据包。

4. 捕获特定网络的流量:

复制代码
tcpdump net 192.168.1.0/24

这个命令将捕获所有源或目的地址在 192.168.1.0/24 网络范围内的数据包。

5. 捕获源地址或目的地址为特定主机的流量:

复制代码
tcpdump src or dst host 192.168.1.100

这个命令将捕获源或目的地址为 192.168.1.100 的数据包

6. 捕获特定端口和主机的流量:

复制代码
tcpdump src host 192.168.1.100 and port 80

这个命令将捕获源地址为 192.168.1.100 且端口为 80 的数据包。

7. 捕获特定 MAC 地址的流量:

复制代码
tcpdump ether host 00:11:22:33:44:55

这个命令将捕获源或目的 MAC 地址为 00:11:22:33:44:55 的数据包

8. 捕获特定 VLAN 的流量:

复制代码
tcpdump vlan 10

这个命令将捕获 VLAN ID 为 10 的数据包

9. 捕获特定 TCP 标志位的流量:

复制代码
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'

这个命令将捕获带有 SYN 或 ACK 标志位的 TCP 数据包

10. 捕获 HTTP GET 请求:

复制代码
tcpdump -nn -vv -X 'tcp[20:] matches "^GET |^Host: "

这个命令将捕获包含 "GET " 或 "Host: " 字符串的 HTTP 请求数据包,并以十六进制和 ASCII 码形式显示数据包内容

11. 捕获并保存数据包到文件:

复制代码
tcpdump -w capture.pcap

这个命令将捕获所有数据包并保存到名为 capture.pcap 的文件中,以便后续分析。

12. 从保存的文件中读取数据包:

复制代码
tcpdump -r capture.pcap

这个命令将从 capture.pcap 文件中读取并显示数据包。

13. 捕获特定时间范围内的数据包:

复制代码
tcpdump -G 3600 -W 1 -w capture -C 200

这个命令将每小时创建一个新的数据包文件,每个文件大小不超过 200MB,最多保留一个文件。

14. 捕获特定 TCP 端口的 SYN 数据包:

复制代码
tcpdump 'tcp[tcpflags] & tcp-syn != 0 and tcp port 80'

这个命令将捕获端口 80 上的 TCP SYN 数据包。

相关推荐
对讲机数码科普5 分钟前
业余无线电野外中继寒地故障排查|东北林区 VHF/UHF 台站四季射频环境适配方案
运维·网络
黄焖鸡能干四碗6 分钟前
大数据平台安全防护策略方案(PPT)
大数据·运维·网络·安全·web安全·制造
Likeadust20 分钟前
门店客流少、曝光弱?视频直播点播EasyDSS音视频平台解锁门店线上拓客新模式
网络·音视频·easydss
szuaudi32 分钟前
K8s 节点假死故障排查过程复盘
网络·容器·kubernetes
一只小鱼儿吖1 小时前
短效代理:高频网络任务的“临时通行证”
网络
我科绝伦(Huanhuan Zhou)11 小时前
Linux 通用压力测试脚本合集:磁盘 + 网络
linux·网络·压力测试
聚美智数12 小时前
网站HTTP状态查询-SEO优化
网络·网络协议·http
treesforest13 小时前
数据包是如何找到回家路的?
网络·智能路由器·nat·ip归属地查询
有毒的教程13 小时前
Linux底层存储路由配
linux·运维·网络
是真的小外套14 小时前
第9章:网络层安全协议 IPSec 学习笔记
网络·网络协议·tcp/ip