我制作的AC程序通过原始套接字将UDP数据包发送到指定的目标IP和端口。该计划支持以下内容:
pthreads
(多线程)。注意- 该程序不支持数据包分段,并且实际上没有必要添加该支持,因为这不是该程序的用途。
我目前正在学习有关深度数据包检查的更多信息,以及 (D)DoS 攻击的工作原理。我制作了这个程序,并且只在我的本地网络上使用它。我计划创建一个 UDP 服务器应用程序,能够过滤 (D)DoS 攻击并在检测到时使用 XDP 阻止它们。该工具将用于测试我将制作的服务器应用程序。最终,我将制作在我的 Anycast 网络上运行的软件,该软件能够通过所有 POP 服务器上的 XDP 丢弃检测到的 (D)DoS 攻击。
我使用 GCC 来编译这个程序。通过 GCC 编译时,必须在命令末尾添加-lpthread
。
这是一个例子:
gcc -g UDP_Sender.c -o UDP_Sender -lpthread
用法如下:
Usage: ./UDP_Sender <Source IP> <Destination IP> <Destination IP> [<Max> <Min> <Interval> <Thread Count>]
请注意,间隔以微秒为单位。最小和最大有效负载以字节为单位。如果将间隔设置为 0,则每个线程上发送数据包之间不会等待。
这是一个例子:
./UDP_Sender 192.168.80.10 10.50.0.4 27015 1000 1200 1000 3
上面的代码不断地将数据包发送到10.50.0.4
(端口27015
),并从192.168.80.10
出现(在我的例子中,是欺骗的)。它每1000
微秒发送1000
- 1200
字节的有效负载数据。它将从3
线程发送这些数据包。
我能够在本地网络上使用此程序推动大约 300 mbps (~23K PPS),直到它使我的路由器和虚拟机过载(我有一个低端边缘路由器)。这是没有设置间隔并使用一个线程的情况。发送信息的虚拟机有 6 个 vCPU,处理器是较旧的 Intel Xeon,主频为 2.4 GHz。运行该程序时,该虚拟机还使用了大约 90 - 95% 的 CPU。
我对 C 语言和网络编程还很陌生。因此,我确信可以进行改进。如果您发现任何可以改进的地方,请告诉我:)