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
  • srcdst: 分别过滤源地址和目的地址的数据包。例如 src 192.168.1.100dst 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 数据包。

相关推荐
hakesashou8 分钟前
Python中常用的函数介绍
java·网络·python
C++忠实粉丝20 分钟前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
九州ip动态20 分钟前
做网络推广及游戏注册为什么要换IP
网络·tcp/ip·游戏
Estar.Lee24 分钟前
时间操作[取当前北京时间]免费API接口教程
android·网络·后端·网络协议·tcp/ip
蝶开三月26 分钟前
php:使用socket函数创建WebSocket服务
网络·websocket·网络协议·php·socket
G丶AEOM40 分钟前
SSL/TLS,SSL,TLS分别是什么
网络·网络协议·网络安全
儒道易行43 分钟前
【DVWA】RCE远程命令执行实战
网络·安全·网络安全
Koi慢热2 小时前
路由基础(全)
linux·网络·网络协议·安全
hzyyyyyyyu3 小时前
内网安全隧道搭建-ngrok-frp-nps-sapp
服务器·网络·安全
明明跟你说过4 小时前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump