You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CSV流量dump计算数据包大小并在Python中生成分布

从CSV流量dump计算数据包大小并生成Python分布

一、计算数据包大小的逻辑

CSV中的帧长度字段是核心依据,具体计算方式取决于你需要的是哪一层的数据包大小:

  • 链路层总大小:直接使用CSV中的帧长度值,这是抓包工具(如Wireshark)捕获的完整以太网帧字节数,包含14字节以太网头、IP/TCP/UDP数据、4字节CRC校验尾。
  • IP层数据包大小:如果需要排除链路层开销,用帧长度 - 18(14字节以太网头 + 4字节CRC);若抓包导出的帧长度不含CRC,仅减14字节即可。
  • 传输层净荷大小:如果CSV中没有IP头长度字段,无法精确计算(IP头长度可变),只能基于IP层大小再减去20字节(IP头最小长度)估算。

注意:如果流量不是以太网链路(如PPP),链路层头部长度需对应调整(比如PPP是8字节)。

二、Python生成数据包大小分布的实现

依赖准备

先安装所需库:

pip install pandas matplotlib seaborn

完整代码示例(推荐用Pandas)

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 1. 读取CSV流量文件
# 替换为你的CSV路径和实际帧长度列名(比如"frame_length")
df = pd.read_csv("traffic_dump.csv")
frame_len_col = "帧长度"

# 2. 计算目标数据包大小(这里以链路层总大小为例)
# 若需IP层大小,替换为 df["packet_size"] = df[frame_len_col] - 18
df["packet_size"] = df[frame_len_col].astype(int)

# 3. 生成分布可视化
plt.figure(figsize=(10, 6))
# 直方图+密度曲线,bins可根据数据范围调整
sns.histplot(data=df, x="packet_size", kde=True, bins=50, edgecolor="black")

plt.title("数据包大小分布")
plt.xlabel("大小(字节)")
plt.ylabel("数据包数量")
plt.grid(axis="y", linestyle="--", alpha=0.7)

# 保存图表或直接显示
plt.savefig("packet_size_dist.png")
plt.show()

# 输出统计指标(均值、中位数、分位数等)
print("数据包大小统计:")
print(df["packet_size"].describe())

轻量版(无Pandas,用原生CSV模块)

如果不想用Pandas,用Python标准库实现:

import csv
import matplotlib.pyplot as plt

packet_sizes = []
frame_len_col = "帧长度"

# 读取CSV并提取有效帧长度
with open("traffic_dump.csv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f)
    for row in reader:
        try:
            # 转换为整数,跳过无效数据
            size = int(row[frame_len_col])
            packet_sizes.append(size)
        except (ValueError, KeyError):
            continue

# 绘制直方图
plt.figure(figsize=(10, 6))
plt.hist(packet_sizes, bins=50, edgecolor="black", density=True)
plt.title("数据包大小分布")
plt.xlabel("大小(字节)")
plt.ylabel("概率密度")
plt.grid(axis="y", linestyle="--", alpha=0.7)
plt.show()

内容的提问来源于stack exchange,提问作者Steamer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 19:40:18