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

Linux 性能优化实战:CPU / 内存 / IO / 网络全链路调优,线上可直接落地 本文为 Linux 线上服务器性能优化实战,从 CPU、内存、IO、网络四个维度讲解瓶颈定位方法,配套 top、vmstat、iostat、tcpdump 等工具实操,附带可直接上线的内核调优参数,适合运维工程师排查高并发服务器卡顿、负载高、延迟大等问题。 阅读详情

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

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

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

1. 指标不是单独使用的

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

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

2. Shannon 熵如何计算

对第 i 个桶,p_i = count_i / total:

H = - Σ p_i * log2(p_i)

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

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. 窗口轮转与判定

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 压力:

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

Traffic_parse:轻量级实时流量特征解析工具实战指南 网络流量分析是运维、安全与开发协同排障的核心能力。传统方案依赖Wireshark抓包+离线解析,存在延迟高、内存大、门槛高三大瓶颈;而现代云原生与微服务架构下,亟需一种能实时提取协议行为、会话状态与应用层指标的轻量化工具。Traffic_parse正是为此设计——基于零拷贝Ring Buffer与流式特征建模,仅用单核即可处理万兆流量,内存恒定<50MB,并输出如http_avg_latency_ms、retransmit_rate、tls_version_mismatch等17个高业务含义指标。它不替代深 阅读详情

相关推荐

LVGL v8.3 图片显示与解码缓存实战:PNG 上屏、C 数组与文件双方案

LVGL v8.3 图片两种存储方式、PNG/JPG 上屏解码器挂载、LV_IMG_CACHE_DEF_SIZE 缓存调优、手动预解码头像有效性判断,及"缓存被动画清空"真实踩坑。

汪同学的博客 427

static 的三种用法:C 语言里一个关键字的三张面孔

本文系统讲解 C 语言中 static 关键字的三种用法:修饰局部变量延长生命周期、修饰全局变量与函数限制作用域到本文件。通过一个包含三个文件的完整工程示例对照演示,并从存储期、作用域与链接性三个属性解释其统一原理,最后补充单元测试框架偏爱 static 函数的工程实践。

大模型全栈工程师 · Thanks_ks 313

【信息科学与工程学】【通信工程】第七十七篇 城域网+FTTR/FTTB/FTTC/FTTO的数学分析01

总带宽 Btotal​需考虑各业务带宽 Bi​及统计复用性(按80%计算):Btotal​=0.8∑i=1n​Bi​​。调度延迟 Di​=ri​li​​,其中 li​为包长。:dtdN2​​=hνp​APp​σap​​(Nt​−N2​)−τN2​​−hνs​APs​σes​​N2​,N2=上能级粒子数,N_t=总Er³⁺浓度,σ_ap/σ_es=吸收/发射截面,τ=荧光寿命(≈10ms),A=纤芯面积。调度分数 Scorej​=w1​umax​−umin​umax​−uj​​+w2​mmax​mj​​。

weixin_49199313的博客 417

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 239

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 403

【信息科学与工程学】【通信工程】计算机科学与自动化——第二百三十三篇 云NaaS服务 系列二02

字段内容类型​云网络自定义路由表(Custom Route Table):允许用户自定义 VPC 或子网的路由规则,控制流量走向,支持黑白名单、策略路由。端计算节点->边缘计算节点->边缘DC->中心云的网络情况及存储需求及配置情况列表​端计算节点为 VPC 内的云资源。边缘计算节点不适用。边缘 DC 和中心云为路由表管理平台。存储需求:路由条目存储于数据库。网络:路由表在虚拟路由器中执行。QoS:无。网络的端到端配置(从接入到汇聚到核心)​。

weixin_49199313的博客 329

选型笔记:Type‑C 扩展坞方案评估|DP1.4 转 HDMI2.0 桥接芯片 GSV2201S@ACP

本文记录 GSV2201S 这款 DP1.4a 转 HDMI2.0 桥接芯片评估,梳理视频、HDCP、PD 集成能力,总结 Type‑C 转接 Dongle、扩展坞方案的适配边界,以及差分走线、PD 时序、HDCP 握手等高频调试问题,为 C 口视频转接方案选型提供参考。

ACP广源盛的博客 221

【信息科学与工程学】【产品体系】计算机科学与自动化——第一百八十九篇 操作系统内核(微内核/宏内核)函数与算法02

宏内核(Linux)更多典型内核函数/算法,从编号271开始,覆盖中断管理、热插拔、PCI、ACPI、固件、崩溃转储、kexec、休眠、watchdog、RTC、hwmon、LED、backlight、input子系统、remoteproc等更多领域。编号类型领域内核类型内核中的函数/算法/模块/模组模块的调用关系模块/函数/算法逐步推理思考的数学表达式及参数列表及参数数值设计模块的C/C++/其他代码关联知识271中断管理中断描述符宏内核 / (中断子系统核心)驱动申请中断 → → → 分配irq_

weixin_49199313的博客 109

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 391

【信息科学与工程学】【安全领域】第七十篇 负载均衡设备的主要算法01

每个服务器有一个对槽位的偏好排序, 调度器(表)需要为每个槽位分配一个服务器, 目标是整体上满足所有服务器的偏好(即均匀填充), 同时保持稳定性(变化小)。: 对于一个新到达的请求, 如果将其分配到当前有cj个请求(包括正在服务的)的服务器sj, 其期望等待时间为 (cj + 1) / μj。输入:服务器集群S={s1, s2, ..., sn}, 权重W={w1, w2, ..., wn}, 当前指针i。输出:选中的服务器sj。输入:服务器集群S, 各服务器当前活动连接数cj, 各服务器预设权重wj。

weixin_49199313的博客 524

【信息科学与工程学】【通信工程】第一百八十八篇 通信网络中的数学物理01

因素及参数的数学建模与详细配置SDN将控制平面与数据平面分离,控制器负责全局视图与决策。控制器部署问题(Controller Placement Problem, CPP)常用图论建模:给定网络拓扑 G=(V,E),候选控制器位置集合 C⊆V,需选择k个控制器位置,使得交换机到最近控制器的平均时延或最坏时延最小化,同时考虑控制器间同步开销。

weixin_49199313的博客 604

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 337

【信息科学与工程学】计算机科学与自动化-——第十五篇云计算 12 公有云里的“多Region + 多AZ“ 02 运营算法01

算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)算法逐步思考推理思考(含数学方程式、对象、资源、任务、进程/协程/线程及对应的代数、约束、目标函数/传递函数/依赖函数、参数及参数的数值范围及边界条件、逐步推理的数学方程式列表、上下文切换、并发/串行/随机/乱序/顺序)云厂商提高闲置资源利用率。算法复杂度为O(N),N为实例数量。

weixin_49199313的博客 282

【C语言】字符与字符串函数

C语言中字符串为以\0结尾的字符数组,标准库函数基于此约定。本文解析字符串内存布局,详解ctype.h与string.h中字符分类、长度计算、拷贝、比较等函数的使用要点,强调长度判断与越界风险,最后通过命令行待办事项示例整合fgets、sscanf、strncpy、strcmp,展示实际应用中的关键细节。

记录在学习过程中学到的知识 346

从源码拆解DOS攻击原理:三类手法与防御配置实战

拒绝服务攻击(DoS)是网络安全领域最基础的威胁类型,通过耗尽目标系统资源使服务不可用。理解其源码原理是构建防御体系的前提。本文从TCP三次握手状态机、UDP无连接放大效应到HTTP慢速连接占用,系统拆解三类典型攻击的核心代码逻辑,并指出攻击代码中的发包引擎、状态维护与速率控制模块,反向映射出半开连接超时、SYN Cookie、Nginx超时参数等可直接落地的防御配置。结合隔离环境下的实验复现与量化对比方法,帮助读者在安全可控范围内完成从攻击原理到防护策略的闭环学习,为应对真实网络攻击提供可操作的工程实践参

weixin_34081595的博客 652

UDP Flood原理、压力测试与防御实战指南

UDP(用户数据报协议)是一种无连接、不可靠但高效的低延迟传输层协议,广泛应用于实时音视频、在线游戏、DNS查询及物联网通信等场景。其核心原理在于尽最大努力交付数据包,无需建立连接和维护状态,这使其在实现高速数据传输的同时,也常被滥用于发起UDP Flood攻击,通过发送海量数据包耗尽目标带宽与系统资源。在合规的工程实践中,理解UDP Flood机制对进行网络压力测试、评估服务器与网络设备性能、验证安全防护体系至关重要。例如,借助iperf3等专业工具可精准测量UDP带宽、抖动与丢包率,而通过Python

weixin_34296641的博客 372

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 382

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 409

C++ 函数模版

模板参数:● template ,T 就是类型占位符,名字可以自定义,习惯用T● 占位符可以在函数返回值、形参、函数内部当作类型使用使用要点模板代码一般写在头文件:编译器需要看到完整模板源码,才能在每个编译单元完成实例化全局函数、类内成员函数都可以写成模板实例化发生在编译阶段,不是运行时隐式实例化:调用时编译器自动推导实参类型,生成对应版本函数。

2501_94041724的博客 304

IGV新手必看:5分钟搞定ChIP-seq/DAP-seq/ATAC-seq数据可视化(附常见报错解决方案)

本文为IGV新手提供了一份快速上手的实战指南,详细讲解了如何高效完成ChIP-seq、DAP-seq、ATAC-seq等数据的可视化。内容涵盖软件安装、基因组导入、文件格式转换与优化,并重点剖析了“导入后一片空白”等常见报错的根本原因与解决方案,帮助用户在5分钟内避开雷区,生成可用于发表的IGV专业图谱。

weixin_29198045的博客 539

ESP8266入门(一)固件烧录及常见问题分析

为了实现对数据的远程收集和分析,偶然间发现了esp8266这个模块,对此进行了深入的学习,可是在学习之初遇到了大量的问题,这个系列文章就为大家讲讲我遇到的坑以及解决办法,还有esp8266如何连上oneNet云平台的方法。因为我用的是esp8266nodemcu,可以直接连接usb进行烧录,如果用模块的话接线就比较麻烦,可以去搜搜看.

Jerryxuzherui的博客 8955
上一篇: 【C/C++】手写 DPDK 协议栈(十):DPDK 接入 dnspod-sr,实现高性能 DNS UDP 处理
下一篇: 【C/C++】手写 DPDK 协议栈(十二):TCP 并发与自实现 epoll 的就绪事件分发
SilentSlot
博客等级 码龄16年 44粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值