1. 什么是 pcapng 文件?
.pcapng(Packet Capture Next Generation)是一种现代网络数据包捕获文件格式,是 .pcap 格式的升级版,由 Wireshark 社区开发。它以模块化块(Block)结构存储网络数据包,解决了 .pcap 在元数据支持、文件大小限制等方面的不足,广泛用于网络分析、流量监控和安全研究。
1.1 核心特性
- 数据包存储:记录原始数据包,包括头部(时间戳、长度等)和有效载荷(payload)。
- 元数据支持:存储捕获环境信息(如接口、设备、注释),适合复杂场景。
- 多接口捕获:支持从多个网络接口(如 Wi-Fi、BLE、Zigbee)捕获数据,适应 IoT 网络。
- 扩展性:通过自定义块(Custom Block)支持用户定义数据。
- 跨平台兼容:支持 Wireshark、tcpdump、Scapy、Pyshark 等工具。
1.2 与 .pcap 的对比
| 特性 | .pcap |
.pcapng |
|---|---|---|
| 开发时间 | 较早(libpcap 标准) | 现代(Wireshark 社区) |
| 结构 | 简单,固定头部 + 数据包 | 模块化块结构 |
| 元数据 | 有限(仅时间戳、长度) | 丰富(接口、注释、统计等) |
| 文件大小 | 最大 2GB | 无限制 |
| 多接口支持 | 不支持 | 支持 |
| 工具兼容性 | 广泛 | 现代工具(如 Wireshark)支持 |
在 IoT 流量指纹和分类研究中,.pcapng 是首选格式,因为它能记录复杂网络环境(多设备、多协议)的详细信息,支持提取设备指纹所需的多样化特征。
2. pcapng 文件的结构
理解 .pcapng 文件的模块化结构是解析和特征提取的基础。以下是详细的结构分析。
2.1 总体结构
- 文件由一系列**块(Blocks)**组成,每个块包含:
- 块类型(Block Type):标识块的功能(如数据包、接口描述)。
- 块长度(Block Total Length):块的总字节数。
- 块内容(Block Body):具体数据。
- 可选填充:确保字节对齐。
- 块之间可以嵌套,文件以 Section Header Block 开始,可能包含多个捕获会话。
2.2 主要块类型
以下是 .pcapng 文件的核心块类型及其在 IoT 研究中的作用:
-
Section Header Block (SHB):
- 作用:定义文件的基本信息,标志捕获会话的开始。
- 内容:
- 文件格式版本(如 1.0)。
- 字节序(大端/小端)。
- 捕获工具信息(名称、版本)。
- 操作系统、硬件信息。
- IoT 应用:提供捕获环境上下文(如 IoT 网关的操作系统),有助于分析数据来源。
-
Interface Description Block (IDB):
- 作用:描述捕获数据包的网络接口。
- 内容:
- 接口类型(以太网、Wi-Fi、BLE 等)。
- 时间戳分辨率(微秒、纳秒)。
- 捕获过滤器(如 BPF 规则)。
- 接口名称、描述。
- IoT 应用:IoT 设备可能使用多种协议,IDB 帮助区分不同接口的流量。
-
Enhanced Packet Block (EPB):
- 作用:存储单个数据包,是特征提取的核心块。
- 内容:
- 时间戳(精确到纳秒)。
- 数据包长度(捕获长度和原始长度)。
- 数据包内容(链路层、IP 层、传输层、应用层)。
- 可选元数据(如丢包计数、接口 ID)。
- IoT 应用:EPB 提供包大小、时间间隔、协议等特征的基础数据。
-
Simple Packet Block (SPB):
- 作用:简化版数据包块,仅存储数据包内容,无时间戳等元数据。
- IoT 应用:因缺乏时间戳,SPB 在 IoT 研究中较少使用。
-
Name Resolution Block (NRB):
- 作用:存储名称解析信息(如 IP 到域名的映射)。
- 内容:DNS 记录、主机名。
- IoT 应用:分析 IoT 设备与云服务器(如 AWS、Google)的通信目标。
-
Custom Block (CB):
- 作用:存储用户自定义数据。
- 内容:任意数据(如设备 ID、实验标签)。
- IoT 应用:标记 IoT 设备类型或实验条件,便于分类。
-
Interface Statistics Block (ISB):
- 作用:记录接口的统计信息。
- 内容:捕获数据包总数、丢包数、捕获时间范围。
- IoT 应用:评估捕获质量,特别是在高流量 IoT 网络中。
2.3 文件结构示例
[Section Header Block]
[Interface Description Block 1]
[Interface Description Block 2]
[Enhanced Packet Block 1]
[Enhanced Packet Block 2]
...
[Interface Statistics Block]
[Section Header Block] // 第二个捕获会话
...
2.4 结构对特征提取的重要性
- EPB:提供数据包的原始数据和时间戳,是提取时间、流量、协议特征的基础。
- IDB 和 CB:帮助区分不同 IoT 设备的流量,标记设备类型。
- SHB 和 NRB:提供捕获环境和目标服务器信息,辅助上下文分析。
3. pcapng 文件的生成
3.1 捕获工具
.pcapng 文件通过网络捕获工具生成,常用工具包括:
- Wireshark:图形化界面,适合手动捕获和分析。
- tcpdump:命令行工具,适合自动化捕获。
- Tshark:Wireshark 的命令行版,适合批量处理。
- Scapy:Python 库,支持捕获和生成
.pcapng。 - Pyshark:基于 Tshark 的 Python 封装,适合快速开发。
3.2 捕获流程
- 选择接口:确定捕获的网络接口(如
eth0、wlan0)。 - 设置过滤器:使用 Berkeley Packet Filter (BPF) 规则筛选流量(如
tcp port 80、host 192.168.1.100)。 - 启动捕获:运行工具,记录数据包。
- 保存文件:保存为
.pcapng格式。
3.3 IoT 场景中的捕获
- 多协议支持:IoT 设备可能使用 Wi-Fi、BLE、Zigbee 等,需选择支持多种协议的工具(如 Wireshark)。
- 过滤优化:IoT 网络流量复杂,建议用 BPF 筛选特定设备或协议,减少文件大小。
- 时间同步:确保捕获设备时间同步,精确时间戳对时间序列特征至关重要。
3.4 示例:使用 tcpdump 捕获
# 捕获 wlan0 接口的 MQTT 流量(端口 1883),保存为 iot_traffic.pcapng
sudo tcpdump -i wlan0 port 1883 -w iot_traffic.pcapng
4. 特征提取:全面覆盖 IoT 流量指纹
特征提取是 IoT 流量指纹和分类研究的核心。以下是全面的特征类别,涵盖时间、流量、协议、内容、统计、行为等多个维度,适用于 .pcapng 文件的分析。
4.1 特征类别及提取方法
4.1.1 时间相关特征
时间特征反映流量的时间模式,是 IoT 设备指纹的重要组成部分。
- 包到达时间戳(Timestamp):每个数据包的捕获时间。
- 包间时间间隔(Inter-Arrival Time, IAT):相邻数据包的时间差。
- 时间窗口统计:
- 每秒/分钟的数据包数量。
- IAT 的均值、方差、最大值、最小值。
- 周期性模式:检测周期性通信(如心跳包)。
- IoT 应用:IoT 设备常有固定时间间隔的通信(如智能灯的周期性状态更新)。
提取方法:
- 从 EPB 的时间戳字段提取。
- 使用 Scapy 或 Pyshark 计算 IAT 和统计特征。
4.1.2 流量相关特征
流量特征描述数据包的大小和方向,反映设备的数据传输模式。
- 包大小(Packet Size):数据包的总长度(字节)。
- 上下行比例:上行(客户端到服务器)和下行(服务器到客户端)数据量的比例。
- 流量速率:单位时间内的数据量(字节/秒)。
- 包大小分布:包大小的直方图、均值、方差。
- IoT 应用:不同 IoT 设备有独特的包大小模式(如摄像头产生较大的视频流)。
提取方法:
- 从 EPB 的长度字段提取包大小。
- 根据源/目标 IP 区分上下行。
4.1.3 协议相关特征
协议特征描述网络通信的协议栈和端口使用情况。
- 协议类型:链路层(如 Wi-Fi)、网络层(如 IP)、传输层(如 TCP、UDP)、应用层(如 MQTT、HTTP)。
- 端口号:源端口和目标端口。
- 协议比例:TCP、UDP、ICMP 等协议的包数占比。
- 协议序列:数据包的协议转换模式(如 DNS → TCP → HTTP)。
- IoT 应用:IoT 设备常使用特定协议(如 MQTT、CoAP)。
提取方法:
- 从 EPB 的数据包内容解析协议字段。
- 使用 Pyshark 的
highest_layer或 Scapy 的协议检查。
4.1.4 内容相关特征
内容特征分析应用层数据,需注意加密流量的限制。
- 头部字段:HTTP 请求头、DNS 查询、MQTT 主题。
- 有效载荷大小:应用层数据的字节数。
- 关键字:特定协议的标志性字符串(如 HTTP 的“GET”)。
- IoT 应用:分析非加密协议(如 MQTT)的主题或消息类型。
提取方法:
- 从 EPB 的有效载荷提取,需解码(如 UTF-8)。
- 对加密流量,聚焦头部长度或模式。
4.1.5 统计相关特征
统计特征对流量模式进行聚合分析。
- 包数统计:总包数、每协议包数、每 IP 包数。
- 流量统计:总数据量、每协议数据量。
- 突发性(Burstiness):短时间内高流量的时间窗口。
- 熵(Entropy):包大小或 IAT 的信息熵,反映流量随机性。
- IoT 应用:统计特征可区分设备行为(如摄像头的高突发性流量)。
提取方法:
- 使用 Pandas 对提取的特征进行聚合计算。
- 计算熵需要信息论公式。
4.1.6 行为相关特征
行为特征分析设备的通信模式和交互目标。
- 通信目标:目标 IP、域名、服务器地理位置。
- 会话特征:TCP 会话的持续时间、包数、数据量。
- 交互模式:设备是否主动发起连接、响应频率。
- IoT 应用:不同设备与云服务器的交互模式不同(如智能音箱频繁查询 DNS)。
提取方法:
- 从 NRB 提取域名信息。
- 分析 TCP 会话的 SYN/ACK 包。
4.1.7 网络拓扑特征
拓扑特征描述设备在网络中的位置和交互。
- 邻居设备:与设备通信的本地 IP/MAC 地址。
- 网关交互:设备与网关的通信频率。
- 广播/多播:广播包或组播包的比例。
- IoT 应用:拓扑特征可推断设备角色(如传感器 vs. 控制器)。
提取方法:
- 从 EPB 的源/目标 MAC 地址提取。
- 分析 ARP 或 IGMP 包。
4.1.8 加密流量特征
对于加密流量(如 TLS),可提取不可加密的元数据。
- TLS 握手信息:证书信息、加密套件、TLS 版本。
- 加密包模式:包大小和 IAT 的序列模式。
- IoT 应用:加密流量占 IoT 通信的大部分,模式分析至关重要。
提取方法:
- 从 EPB 的 TLS 层提取握手字段。
- 使用 Scapy 或 Pyshark 解析 TLS 包。
4.2 特征提取的重要性
- 区分设备:不同 IoT 设备(如智能灯、摄像头)在时间、流量、协议等方面有独特模式。
- 分类任务:特征输入机器学习模型,区分设备类型或检测异常行为。
- 鲁棒性:多维度特征(时间、协议、行为等)提高分类准确性,适应加密流量。
5. 使用 Scapy 探索和处理 .pcapng
Scapy 是一个强大的 Python 网络分析库,支持解析、生成和修改 .pcapng 文件,特别适合深度协议解析和特征提取。
5.1 安装 Scapy
pip install scapy
5.2 特征提取代码示例
以下是使用 Scapy 提取全面特征的代码,覆盖上述所有类别。
5.2.1 综合特征提取
from scapy.all import rdpcap
import pandas as pd
from collections import Counter
import math
import matplotlib.pyplot as plt
# 读取 .pcapng 文件
packets = rdpcap('iot_traffic.pcapng')
# 初始化特征列表
features = []
protocol_counter = Counter()
packet_sizes = []
timestamps = []
src_ips = []
dst_ips = []
ports = []
sessions = {
} # 跟踪 TCP 会话
for pkt in packets:
feature = {
'timestamp': pkt.time, # 时间戳
'length': len(pkt), # 包大小
'src_ip': pkt['IP'].src if 'IP' in pkt else None,
'dst_ip': pkt['IP'].dst if 'IP' in pkt else None,
'protocol': pkt['IP'].proto if 'IP' in pkt else None,
'src_port': pkt['TCP'].sport if 'TCP' in pkt else (pkt['UDP'].sport if 'UDP' in pkt else None),
'dst_port': pkt['TCP'].dport if 'TCP' in pkt else (pkt['UDP'].dport if 'UDP' in pkt else None),
'is_mqtt': 'MQTT' in pkt, # 检查 MQTT 协议
'is_http': 'HTTP' in pkt, # 检查 HTTP 协议
'payload_size': len(pkt['Raw'].load) if 'Raw' in pkt else 0
}
# 统计协议
if 'IP'

最低0.47元/天 解锁文章
9232

被折叠的 条评论
为什么被折叠?



