一、什么是流量分析
流量分析是对网络数据传输进行监测、分析和优化的关键技术,广泛应用于IT运维、网络安全和业务优化等领域。它通过捕获网络流量数据,对数据包进行解析、重组和解码,实现对网络通信的实时监控、历史数据分析及异常检测。流量分析可识别流量来源、路径与价值,监测带宽使用、协议分布、应用性能等指标,帮助发现网络攻击、定位故障瓶颈、优化网络拓扑。常用工具包括Wireshark、tcpdump等,支持端口级和设备级深度分析,提供丢包率、时延等高精度性能数据,是保障网络稳定运行和提升运维效率的核心手段。
二、工具:wireshark
Wireshark(前称Ethereal)是一款免费开源的网络封包分析软件,被誉为网络分析领域的"鲨鱼",象征其敏锐精准的数据捕获能力。它通过WinPCAP/libpcap接口直接与网卡交互,将网卡设为混杂模式以捕获所有流经数据包,并支持TCP、UDP、HTTP、HTTPS等数千种协议的深度解析。软件提供实时数据捕获、灵活的过滤引擎、协议分层统计及可视化展示等功能,广泛应用于网络故障排查、安全测试、协议研究及性能调优等场景。Wireshark跨平台支持Windows、macOS和Linux系统,在GNU GPL许可证保障下免费使用,是全球网络工程师、安全分析师和开发人员不可或缺的诊断工具,帮助用户"看见"网络中数据流动的每一细节。
(一)安装
Linux系统
debian系列:debian、kali、ubuntu……
sudo apt install wireshark
redhat系列:fedora、centOS、openEuler……
sudo dnf install wireshark
或者:
sudo yum install wireshark
arch系列:arch、manjaro、steamOS……
sudo pacman -S wireshark-qt
MacOS系统
brew install wireshark
或从官网下载macOS Disk Image (.dmg),按向导安装。
Windows系统
访问官网下载- Windows x64 Installer,以管理员身份运行安装。
安装过程中会安装winPcap,不要取消。
(二)原理
数据捕获流程
网络数据包 → 网卡 → 网卡驱动 → Libpcap/WinPcap → Wireshark
- 网卡接收:网络适配器接收流经的数据帧
- 混杂模式:Wireshark 通过底层库将网卡设为混杂模式,可接收所有经过网卡的数据包(不仅限于本机)
- 驱动传递:网卡驱动将原始数据传递给捕获库
- 协议解析:Wireshark 对数据包进行解码,以可读形式展示
系统结构
| 模块 | 功能 |
|---|---|
| GTK | 图形界面,处理用户输入/输出显示 |
| 核心引擎 | 连接各模块,负责综合调度 |
| 捕获引擎 | 依赖 Libpcap/ WinPcap/Npcap进行底层数据捕获 |
| Wiretap | 读取和保存捕获文件,支持多种文件格式 |
(三)界面
按钮介绍:
(四)使用
筛选
Wireshark过滤器分两种,一种是捕捉过滤器,一种是显示过滤器。捕捉过滤器(CaptureFilters):用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。显示过滤器(DisplayFilters):在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改。在wireshark中一般使用的是显示过滤器。
| 搜索类型 | 说明 | 例子 | 含义 |
|---|---|---|---|
| Display filter 表达式筛选 | 使用 Wireshark 内置的语法表达式进行协议或字段级筛选。 | Not ip Ip.addr==192.168.0.1 Arp | 隐藏无关流量,只保留与该特定 IP 地址通信的所有arp数据包。 |
| Hex Value 十六进制值筛选 | 在原始数据(Raw Data)中按字节匹配特定十六进制序列。 | 00:ff Ff:ff 00:ab :b1 :f0 | 快速定位到网络中的广播帧(如 ARP 请求)。 |
| String 字符串筛选 | 在数据包载荷中搜索明文文本字符串。 | Workstation1 UserB Domain | 明文查找 |
常用操作符和示例:
1. 比较操作符
| 操作符 | 说明 |
|---|---|
== | 等于 (Equal to) |
!= | 不等于 (Not equal to) |
> | 大于 (Greater than) |
< | 小于 (Less than) |
<= | 小于或等于 (Less than or equal to) |
>= | 大于或等于 (Greater than or equal to) |
2. 逻辑操作符
| 操作符 | 说明 |
|---|---|
And | 两个条件需同时满足 |
Or | 其中一个条件被满足 |
Xor | 有且仅有一个条件被满足 |
Not | 没有条件被满足 / 取反 |
3. 过滤器示例
| 过滤器 | 说明 |
|---|---|
!tcp.port==3389 | 排除 RDP (远程桌面协议) 流量 |
Tcp.flags.syn==1 | 筛选具有 SYN 标志位的 TCP 数据包 (通常是连接请求) |
Tcp.flags.rst==1 | 筛选具有 RST 标志位的 TCP 数据包 (通常是连接重置) |
!arp | 排除 ARP (地址解析协议) 流量 |
http | 筛选所有 HTTP 流量 |
Tcp.port==23 || tcp.port==21 | 筛选文本管理流量 (Telnet 或 FTP) |
Smtp||pop||imap | 筛选文本 email 流量 (SMTP, POP3, 或 IMAP) |
Ip.addr==192.168.1.1 | 筛选与指定 IP 地址 192.168.1.1 相关的流量 |
Frame.len<=128 | 筛选长度小于或等于 128 字节的数据包 |
跟踪TCP流
红色表示从源地址前往目标地址的流量,蓝色相反。
流的内容出现的顺序同他们在网络中出现的顺序一致。
导出文件
在 Wireshark 菜单栏中点击"文件",选择"导出对象",然后点击"HTTP",系统会列出当前捕获数据中所有通过 HTTP 协议传输的文件对象。
三、其他工具
(一)Binwalk
| 项目 | 说明 |
|---|---|
| 功能 | 固件分析工具,用于扫描、提取及逆向工程二进制文件 |
| 特点 | 完全自动化脚本,支持自定义签名、提取规则和插件模块,易于扩展 |
| 适用场景 | CTF杂项、固件分析、文件分离、压缩包提取 |
常用命令
| 命令 | 说明 |
|---|---|
binwalk 文件名 | 分析文件,扫描文件结构签名 |
binwalk -e 文件名 | 提取探测到的文件系统(-e = --extract) |
binwalk -Me 文件名 | 递归提取(-M = --matryoshka),仅对 -e 和 --dd 有效 |
binwalk -Me -d 5 文件名 | 限制递归提取深度为5(默认深度为8) |
binwalk -E 文件名 | 执行熵分析 |
(二)Foremost
| 项目 | 说明 |
|---|---|
| 功能 | 基于文件头、尾部信息及内建数据结构恢复/提取文件 |
| 特点 | 命令行工具,当binwalk无法分离时可作为替代方案 |
| 适用场景 | 文件恢复、数据取证、CTF文件分离 |
常用命令
| 命令 | 说明 |
|---|---|
foremost 文件名 | 默认提取文件 |
foremost 文件名 -o 输出目录 | 指定输出目录 |
foremost -i 文件名 | 交互模式 |
(三)Stegdetect
| 项目 | 说明 |
|---|---|
| 功能 | 检测JPEG文件中是否包含隐藏内容 |
| 特点 | 使用卡方分析、RS分析等统计方法,可分析隐写工具类型 |
| 适用场景 | JPEG隐写检测、CTF图片隐写分析 |
| 局限 | 低嵌入率下灵敏度下降,需手动调参 |
常用命令
| 命令 | 说明 |
|---|---|
stegdetect 文件名 | 检测JPEG文件中的隐写内容 |
stegdetect -t 文件名 | 指定检测的隐写算法类型 |
(四)Outguess
| 项目 | 说明 |
|---|---|
| 功能 | 提取/嵌入JPEG文件中使用Outguess算法的隐藏信息 |
| 特点 | 不改变文件头结构,采用统计冗余的自适应隐写机制 |
| 适用场景 | CTF隐写题、JPEG信息提取 |
常用命令
| 命令 | 说明 |
|---|---|
outguess -r 输入文件 输出文件 | 提取隐藏数据(-r = retrieve) |
outguess -k "密码" -r 输入文件 输出文件 | 使用密码提取 |
(五)Jphide / Jpseek
| 项目 | 说明 |
|---|---|
| 功能 | 基于最低有效位(LSB)的JPEG格式图像隐写算法 |
| 特点 | Jphide用于嵌入,Jpseek用于提取 |
| 适用场景 | JPEG图片隐写、CTF隐写题 |
常用命令
| 命令 | 说明 |
|---|---|
jpseek 文件名 | 提取Jphide嵌入的隐藏信息 |
jpseek -p 密码 文件名 | 使用密码提取 |