文章目录
-
- [1. 前言](#1. 前言)
- [2. 命令介绍](#2. 命令介绍)
- [3. 常见选项](#3. 常见选项)
-
-
- [3.1. 接口与基本控制](#3.1. 接口与基本控制)
- [3.2 输出控制](#3.2 输出控制)
- [3.3 文件操作](#3.3 文件操作)
- [3.4 高级调试](#3.4 高级调试)
-
- [4. 过滤表达式](#4. 过滤表达式)
-
-
- [4.1 协议类型](#4.1 协议类型)
- [4.2 方向与地址](#4.2 方向与地址)
- [4.3 逻辑运算符](#4.3 逻辑运算符)
-
- [5. 典型使用场景](#5. 典型使用场景)
-
-
- [5.1 网络故障排查](#5.1 网络故障排查)
- [5.2 安全分析与入侵检测](#5.2 安全分析与入侵检测)
- [5.3 性能分析与优化](#5.3 性能分析与优化)
-
linux下抓包工具--tcpdump介绍
1. 前言
⽹络世界中的数据包交互我们⾁眼是看不⻅的,这个时候对于我们而言就是很抽象,如果可以把交互过程"可视化",我们就更容易了解网络了。
tcpdump
和wireshark
就是2个分析网络的神器。
tcpdump 仅⽀持命令⾏格式使⽤,常⽤在 Linux 服务器中抓取和分析⽹络包。
Wireshark 除了可以抓包外,还提供了可视化分析⽹络包的图形⻚⾯。
这两个工具实际上是搭配使⽤的,先⽤ tcpdump
命令在 Linux 服务器上抓包,接着把抓包的⽂件拖出到
Windows 电脑后,⽤ Wireshark 可视化分析。如果实在 win 环境下,直接使用 Wireshark 就可以了。
本文主要针对tcpdump
抓包进行介绍。
2. 命令介绍
tcpdump
命令格式如下:
bash
tcpdump [ -adeflnNOpqStvx ] [ -c count ] [ -F file ]
[ -i interface ] [ -r file ] [ -s snaplen ]
[ -T type ] [ -w file ] [ expression ]
# 简化一下命令形式
tcpdump [选项] [过滤表达式]
核心组成:
- 选项:控制抓包行为(如接口选择、输出格式、保存文件等)。
- 过滤表达式:基于协议、IP、端口等条件筛选数据包
3. 常见选项
3.1. 接口与基本控制
选项 | 作用 | 示例 |
---|---|---|
-i <接口> |
指定监听网卡(如eth0 、any ) |
tcpdump -i eth0 (监听eth0网卡) |
-c <数量> |
抓取指定数量包后停止 | tcpdump -c 10 (抓10个包后退出) |
-D |
列出系统可用网络接口 | tcpdump -D (查看所有接口名称) |
3.2 输出控制
选项 | 作用 | 示例 |
---|---|---|
-n |
禁用DNS解析,直接显示IP地址 | tcpdump -n (显示192.168.1.1而非主机名) |
-nn |
禁用端口服务名解析(显示数字端口) | tcpdump -nn (显示80而非HTTP) |
-v/-vv |
输出详细信息(TTL、协议头等) | tcpdump -vv (显示完整协议头) |
-A |
以ASCII格式显示数据内容 | tcpdump -A (查看HTTP明文请求) |
-X |
十六进制+ASCII显示数据包 | tcpdump -X (分析二进制协议) |
3.3 文件操作
选项 | 作用 | 示例 |
---|---|---|
-w <文件> |
保存抓包数据到文件 | tcpdump -w capture.pcap (保存为Wireshark可读格式) |
-r <文件> |
读取已保存的抓包文件 | tcpdump -r capture.pcap (分析离线数据) |
-C <大小> |
限制抓包文件大小(单位MB) | tcpdump -C 100 (每100MB分割文件) |
3.4 高级调试
选项 | 作用 | 示例 |
---|---|---|
-e |
显示数据链路层头部(MAC地址) | tcpdump -e (分析ARP或交换机转发) |
-t |
不显示时间戳 | tcpdump -t (简化输出) |
4. 过滤表达式
过滤表达式由 协议类型 、方向 、逻辑运算符 组合构成:
4.1 协议类型
-
协议 :
tcp
、udp
、icmp
、arp
等。 -
示例 :
tcpdump icmp
(仅抓ICMP包)bash# ether:icmp协议中没有源ip和目的ip,所以需要依赖于ether 协议 tcpdump -i wlan0 ether src 48:8f:4c:ee:c6:aa #抓取源mac为48:8f:4c:ee:c6:aa的数据包
4.2 方向与地址
- 方向 :
src
(源)、dst
(目标)、host
【src or dst
(双向)】。 - IP/端口 :
host 192.168.1.1
、port 80
、portrange 1-1024
(portrange
用于指定端口范围,格式为portrange start-end
)
bash
sudo tcpdump 'src 192.168.1.106 and src port 22' # 抓取来自192.168.1.106的SSH流量
4.3 逻辑运算符
- 与 :
and
(如tcp and port 80
)。 - 或 :
or
(如host 192.168.1.1 or 192.168.1.2
)。 - 非 :
not
(如not arp
)
5. 典型使用场景
5.1 网络故障排查
-
场景:当遇到网络连接延迟、丢包或服务不可达时,通过抓包分析数据包交互过程。
-
示例:
-
排查 SSH 连接缓慢
bashsudo tcpdump -i eth0 port 22
若发现大量 DNS 查询请求,可能是 DNS 解析延迟导致问题。
-
分析 TCP 握手失败
bashsudo tcpdump -i wlan0 'tcp[tcpflags] & (tcp-syn | tcp-ack) != 0'
-
检测ICMP不可达错误
bashsudo tcpdump 'icmp[0] == 3' # 抓取ICMP目标不可达消息
-
5.2 安全分析与入侵检测
-
场景:检测异常流量(如端口扫描、DDoS 攻击)或未授权访问。
-
示例:
-
捕获高频 SYN 包(可能为 SYN Flood 攻击):
bashsudo tcpdump -i wlan0 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0' | wc -l
-
分析恶意 HTTP 请求:
bashsudo tcpdump -i wlan0 'port 80 and (tcp port 80) and (tcp[tcpflags] & tcp-push != 0)' | grep "GET /malicious.php"
-
5.3 性能分析与优化
-
场景:监控网络带宽占用、协议开销或优化网络参数(如 TCP 窗口大小)。
-
示例:
-
统计特定端口的流量速率:
bashsudo tcpdump -i wlan0 -c 1000 port 443 | pv -l -s 10M > /dev/null
-
分析 TCP 重传率:
bashsudo tcpdump -i wlan0 'tcp & 0x08 != 0' #通过标志位 0x08(重传标志)判断丢包情况
-