【C/C++】手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测

目录

  • [手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测](#手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测)
    • [1. 指标不是单独使用的](#1. 指标不是单独使用的)
    • [2. Shannon 熵如何计算](#2. Shannon 熵如何计算)
    • [3. 窗口轮转与判定](#3. 窗口轮转与判定)
    • [4. 如何验证而不伤及真实网络](#4. 如何验证而不伤及真实网络)
    • [5. 走向可用防护的下一步](#5. 走向可用防护的下一步)
    • 小结

手写 DPDK 协议栈(十一):基于 PPS、SYN 比例和源 IP 熵的 DDoS 检测

标签:DPDK DDoS 信息熵 SYN Flood 网络安全

ddos/ddos.c 将检测逻辑放在高速包路径中:以一秒为统计窗口,计算包速率、TCP SYN 占比与源 IP 分布的 Shannon 熵。当流量超过阈值且熵偏离基线或 SYN 比例异常时,输出疑似 DDoS 告警。

1. 指标不是单独使用的

text 复制代码
疑似攻击 = PPS > 阈值
        AND (|源IP熵 - 正常熵| > 熵偏移阈值 OR SYN比率 > 阈值)

当前课程参数是:256 个源 IP 桶、1 秒窗口、PPS_THRESHOLD=1000SYN_RATIO_THRESHOLD=0.80normal_src_entropy=7.5ENTROPY_DELTA=1.5。这些是实验参数,不是通用生产阈值。

2. Shannon 熵如何计算

对第 i 个桶,p_i = count_i / total

text 复制代码
H = - Σ p_i * log2(p_i)

源地址越均匀,熵一般越高;单源或少量源集中时,熵降低。课程代码先将源 IP 做轻量 hash 后映射到 256 个桶,再遍历非零桶累计熵。

c 复制代码
d->packets++;
d->src_ip_bucket[hash_src_ip(ip_hdr->src_addr) & 255]++;
if (ip_hdr->next_proto_id == IPPROTO_TCP) {
    d->tcp_packets++;
    if ((tcp->tcp_flags & RTE_TCP_SYN_FLAG) &&
        !(tcp->tcp_flags & RTE_TCP_ACK_FLAG))
        d->syn_packets++;
}

3. 窗口轮转与判定

c 复制代码
double entropy = shannon_entropy(d->src_ip_bucket, d->packets);
double syn_ratio = d->tcp_packets ?
    (double)d->syn_packets / d->tcp_packets : 0.0;
if (d->packets > PPS_THRESHOLD &&
    (fabs(entropy - d->normal_src_entropy) > ENTROPY_DELTA ||
     syn_ratio > SYN_RATIO_THRESHOLD)) {
    /* 告警:不要直接全丢包 */
}

窗口结束后要清零桶与计数器再开始下一秒。这里的检测函数只做观察,不应该在数据面直接"一键全丢包":误报会造成比攻击更严重的业务中断。

4. 如何验证而不伤及真实网络

课程使用 hping3 在隔离实验网测试 SYN 压力:

bash 复制代码
hping3 -c 1200 -d 130 -S -w 64 -p 12345 --flood --rand-source 192.168.98.128

仅应在明确授权、隔离的靶场执行,绝不能对公网或未授权主机压测。

5. 走向可用防护的下一步

生产系统应先建立按时间段、业务、目的端口区分的正常基线;告警后可按源/目的维度限速、采样镜像给控制面复核、设置连接表上限。还要防止攻击者通过伪造源 IP 或低慢速模式规避单一熵指标。

小结

熵检测回答的是"流量分布是否异常",SYN 比例回答的是"连接意图是否异常",PPS 回答的是"强度是否异常"。三者组合比只看单包特征更稳健,但阈值必须来自真实业务基线。

学习链接: https://github.com/0voice

相关推荐
bkspiderx10 小时前
从零开始:VS Code搭建C/C++开发环境全指南(Windows/macOS/Linux)
c语言·c++·windows·vs code·c/c++开发环境
东华万里10 小时前
第40篇C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·面试·大学生专区
wuyk55511 小时前
第 6 章 FOC 完整系统整合:从算法到真机跑起来
c语言·开发语言·stm32·单片机·嵌入式硬件
luj_176811 小时前
元设计的诱惑与现实
c语言·开发语言·c++·经验分享·算法
小星星闪亮登场11 小时前
ST表--倍增思想
开发语言·数据结构·c++·算法·思维
东华万里11 小时前
第40篇 C++核心基础与工程实践:从底层逻辑到避坑指南
开发语言·c++·大学生专区
AC赳赳老秦11 小时前
OpenClaw 多源采集公开行业数据:从原始信息到研究报告初稿的自动化实践
java·c语言·c++·python·php·deepseek·openclaw
玩三国杀玩的11 小时前
Pytorch-c++-CUDA
c++·pytorch·python·深度学习
wangjialelele13 小时前
动态规划DP经典题型总结(Java、C++):路径、子数组、子序列、背包问题详解
java·c++·算法·面试·动态规划·代理模式
牛油果子哥q14 小时前
C++STL算法超全精讲:排序/查找/去重/遍历/最值/合并全套API、仿函数、Lambda适配、实战避坑
开发语言·c++·算法