halladj/DynIoT-DDoS
GitHub: halladj/DynIoT-DDoS
基于 NS-3 仿真生成的智慧城市 IoT 移动性感知 DDoS 检测数据集,通过上下文触发的多种攻击场景为入侵检测模型提供更具挑战性的评估基准。
Stars: 0 | Forks: 0
# DynIoT-DDoS
[](https://doi.org/10.5281/zenodo.21627584)
[](https://creativecommons.org/licenses/by/4.0/)
[](LICENSE-CODE)
一个针对智慧城市 IoT 的**支持移动性感知、包含多种攻击类型的 DDoS 检测数据集**,使用 NS-3 生成。
与记录来自**固定**拓扑流量的现有 IoT 入侵检测基准不同,DynIoT-DDoS 捕获了移动 IoT 代理
穿过由固定节点组成的空间异构区域的过程。随着代理移动,其邻居数量
及其合法流量会不断上升
和下降。攻击是**上下文触发的**:每个恶意节点仅在移动代理
处于其无线电范围内时才发起攻击,因此对抗性流量与移动性引起的合法
流量激增同时发生。这在操作层面上实现了移动节点的*flash-crowd ambiguity*。
## 目录
| 路径 | 描述 |
|---|---|
| `data/dyniot_ddos_timeseries.csv.gz` | 每秒时间序列视图 — **11,084 行 × 18 列** |
| `data/dyniot_ddos_flow.csv.gz` | 每个流视图 — **795,683 条记录 × 14 列** |
| `scripts/reproduce_paper_results.py` | 复现论文的检测 + 消融结果 |
这两个视图均派生自**相同的 184 次模拟运行**,因此可以在相同的底层流量上进行连接或比较。
**生成代码:** 生成此数据集的 NS-3 框架位于
**[halladj/simulation-scripts](https://github.com/halladj/simulation-scripts)**。
## 数据集概览
- **184 个场景**(每种攻击类型 46 个),**11,084** 个带标签样本,以 1 Hz 采样
- **攻击占比:72.03 %** — 故意设计的最坏情况对抗性工作负载(参见*注意事项*)
- **4 种上下文触发的攻击类型**,完全平衡(每种 2,771 行):
`udp_flood`、`tcp_flood`、`icmp_flood`、`jamming`(MAC 层信道干扰)
### 模拟环境
菱形场地上的 61 个固定节点(W = 100 m,H = 76 m),13 列间距 8 m,每列节点数呈峰值
分布 `{1,1,3,5,7,7,9,9,7,5,3,3,1}`。一个移动代理速度为 1 m/s,20 m 无线电覆盖范围,
IEEE 802.11n **ad hoc (IBSS)**,硬截断范围传播。两阶段流量:UDP 广播
邻居发现,随后是持续的 TCP 协作。
### 场景网格
| 参数 | 值 |
|---|---|
| 起始偏移量 `d` | 0, 20, 40 m |
| 移动角度 `α` | 从 0° 到 `α_max(d)`,步长为 15°(8 个不同角度,0–75.3°) |
| 攻击者 `n_mal` | 1, 3, 5 |
| 沿路径间距 `s` | 8, 24 m(当 `n_mal` = 1 时为 0) |
所有恶意节点都放置在代理的遍历路径**上**,以确保发生接触。
## 模式(时间序列视图)
**空间上下文**(4)— 创新部分
| 列 | 描述 |
|---|---|
| `Mobile_X_Pos` | 代理的 X 坐标 |
| `Movement_Angle` | 遍历角度 α(度) |
| `Start_Offset` | 起始 X 位置 d |
| `Node_Density` | ρ(t):代理 20 m 范围内的固定节点数 |
**网络活动**(4)
| 列 | 描述 |
|---|---|
| `Node_Sending_Rate_Pkts` / `Node_Sending_Rate_Bytes` | 代理每 1 秒窗口的 TX 速率 |
| `Rx_Bytes_Per_Sec` / `Rx_Pkts_Per_Sec` | 代理每 1 秒窗口的 RX 速率 |
**标签**(2)— `Is_Under_Attack`(二元目标),`Attack_Type`(4 个类别)
**Oracle — 从训练中排除**(2)— `Malicious_Neighbors`、`Dist_To_Attacker`。
这些记录了标签的派生方式(`Is_Under_Attack := Malicious_Neighbors > 0`)。
**将它们用作输入会导致标签泄露** — 真实节点无法知道哪些邻居是恶意的。
**元数据**(6)— `SimulationTime`、`Mobile_Y_Pos`、`Scenario_ID`、`Mobile_Speed`、
`N_Malicious`、`Mal_Spacing`
## 用法
```
import pandas as pd
df = pd.read_csv("data/dyniot_ddos_timeseries.csv.gz") # gzip read natively
SPATIAL = ["Mobile_X_Pos", "Movement_Angle", "Start_Offset", "Node_Density"]
NETWORK = ["Node_Sending_Rate_Pkts", "Node_Sending_Rate_Bytes",
"Rx_Bytes_Per_Sec", "Rx_Pkts_Per_Sec"]
X, y = df[NETWORK + SPATIAL], df["Is_Under_Attack"]
```
### 正确评估 — 按场景分组
同一场景内的各行在时间上是自相关的。随机按行划分会导致测试集中包含近乎重复的行,
并**大幅夸大评分**。请始终按 `Scenario_ID` 分组:
```
from sklearn.model_selection import GroupKFold
cv = GroupKFold(5).split(X, y, groups=df["Scenario_ID"])
```
复现已发表的数值:
```
pip install pandas scikit-learn scipy
python scripts/reproduce_paper_results.py
```
## 参考结果
按场景分组的 5 折 CV,无泄漏。空间上下文改善了每个分类器的检测效果
(支持移动性感知的模型在每种情况的 5/5 折中均获胜):
| 模型 | 移动性感知(8 个特征) | 仅网络(4 个特征) | Δ F1 |
|---|---|---|---|
| Random Forest(150 棵树) | **0.926** ± 0.008 | 0.913 ± 0.010 | +1.3 pp |
| Gradient Boosting(150 个估计器) | **0.927** ± 0.008 | 0.909 ± 0.012 | +1.8 pp |
| Logistic Regression(已缩放) | **0.925** ± 0.008 | 0.903 ± 0.015 | +2.2 pp |
移除 `Mobile_X_Pos` 后,效果依然优于仅网络模型(+0.7 / +1.0 / +1.3 pp),因此这种提升反映了
**通用空间上下文**(密度、角度、偏移量),而不是记忆了攻击者的位置。
## 注意事项及预期用途
- **基于模拟。** 未经物理测试床捕获验证;传播使用了
硬截断范围模型,因此实际阈值可能有所不同。
- **72% 的攻击占比是设计使然**,这是攻击者放置在路径上的结果。这是一个
最坏情况下的对抗性工作负载,而**不是**部署时的典型基准率。如果需要真实的占比,请重新加权或重采样。
- **单一拓扑和移动模型。** 只有一种密度梯度场地;直线、匀速
轨迹。对其他布局(均匀、集群、多中心)的鲁棒性尚未经过测试。
- **攻击覆盖范围**为四类基于流量/MAC 层的攻击。低慢速、应用层和
半开 (SYN) 变体未包含在内。
- **仅限 802.11n** — 不包含 LoRa、NB-IoT 或 BLE。
## 流级别模式
`data/dyniot_ddos_flow.csv.gz` — 每个唯一的网络流一行,遵循 CIC-IDS2017 和 IoTID20
所使用的 CICFlowMeter 特征集,以兼容现有的 IDS pipeline。
| 组 | 列 |
|---|---|
| 标识符(4) | `Flow_ID`、`Src_IP`、`Dst_IP`、`Protocol` |
| 流统计(10) | `Flow_Duration`、`Tot_Fwd_Pkts`、`Tot_Bwd_Pkts`、`TotLen_Fwd_Bytes`、`TotLen_Bwd_Bytes`、`Flow_Bytes_s`、`Flow_Pkts_s`、`Mean_Delay`、`Mean_Jitter`、`Lost_Packets` |
在攻击窗口期间,高吞吐量的泛洪流与合法的低速率
协作流同时出现;`Mean_Delay` / `Mean_Jitter` 捕获了泛洪对同处一地的良性流量造成的排队干扰。
## 生成代码
由 NS-3 3.43 框架(Python 绑定)生成,可在
**[halladj/simulation-scripts](https://github.com/halladj/simulation-scripts)** 获取。使用以下命令复现
完整的场景网格:
```
make validate ATTACK_TYPES="udp_flood tcp_flood icmp_flood jamming" JOBS=18
```
请注意,尝试的 300 个网格点中有 116 个在几何上是不可行的(相对于可用的路径上跨度而言攻击者过多),并在设计时被跳过,留下了 184 个已完成的场景。
## 引用
通过其 **concept DOI** 引用数据集,该 DOI 始终指向最新版本:
```
@dataset{halladj2026dyniotddos,
author = {Halladj, Hamza and Sa\"{i}douni, Djamel Eddine and Maati, Bouchera and D\'{i}az, Gregorio},
title = {{DynIoT-DDoS}: a mobility-aware, multi-attack {DDoS} detection dataset for {Smart City IoT}},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.21627584},
url = {https://doi.org/10.5281/zenodo.21627584}
}
```
请同时引用 accompanying paper(参见 `CITATION.cff`):
## 许可
- **数据** (`data/`) — [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)(参见 `LICENSE`)
- **代码** (`scripts/`) — MIT(参见 `LICENSE-CODE`)
标签:Apex, DDoS检测, NS-3仿真, 安全数据集, 智慧城市, 机器学习, 物联网, 逆向工具