AC-Programm, das ich erstellt habe, um UDP-Pakete über Raw-Sockets an eine bestimmte Ziel-IP und einen angegebenen Port zu senden. Dieses Programm unterstützt Folgendes:
pthreads
(Multithreading).Hinweis – Dieses Programm unterstützt keine Paketfragmentierung und es macht wirklich keinen Sinn, diese Unterstützung hinzuzufügen, da das Programm nicht dafür gemacht ist.
Ich lerne derzeit mehr über die eingehende Paketinspektion und erfahre, wie (D)DoS-Angriffe funktionieren. Ich habe dieses Programm erstellt und verwende es nur in meinem lokalen Netzwerk. Ich plane, eine UDP-Serveranwendung zu erstellen, die in der Lage ist, (D)DoS-Angriffe zu filtern und sie, sobald sie erkannt werden, mithilfe von XDP zu blockieren. Dieses Tool wird zum Testen dieser Serveranwendung verwendet, die ich erstellen werde. Irgendwann werde ich Software entwickeln, die in meinem Anycast-Netzwerk läuft und in der Lage ist, erkannte (D)DoS-Angriffe über XDP auf allen POP-Servern abzuwehren.
Ich habe GCC verwendet, um dieses Programm zu kompilieren. Beim Kompilieren über GCC müssen Sie am Ende des Befehls -lpthread
hinzufügen.
Hier ist ein Beispiel:
gcc -g UDP_Sender.c -o UDP_Sender -lpthread
Die Nutzung ist wie folgt:
Usage: ./UDP_Sender <Source IP> <Destination IP> <Destination IP> [<Max> <Min> <Interval> <Thread Count>]
Bitte beachten Sie, dass das Intervall in Mikrosekunden angegeben ist. Die minimalen und maximalen Nutzlasten werden in Bytes angegeben. Wenn Sie das Intervall auf 0 festlegen, wird zwischen dem Senden von Paketen in jedem Thread nicht gewartet.
Hier ist ein Beispiel:
./UDP_Sender 192.168.80.10 10.50.0.4 27015 1000 1200 1000 3
Das Obige sendet kontinuierlich Pakete an 10.50.0.4
(Port 27015
) und erscheint ab 192.168.80.10
(in meinem Fall gefälscht). Es sendet alle 1000
Mikrosekunden zwischen 1000
und 1200
Byte Nutzdaten. Diese Pakete werden von 3
Threads gesendet.
Ich konnte mit diesem Programm etwa 300 Mbit/s (~23.000 PPS) in meinem lokalen Netzwerk übertragen, bis es meinen Router und meine VM überlastete (ich habe einen Edge-Router der unteren Preisklasse). Dies geschah ohne festgelegtes Intervall und unter Verwendung eines Threads. Die VM, die die Informationen sendete, verfügte über 6 vCPUs und der Prozessor war ein älterer Intel Xeon mit einer Taktung von 2,4 GHz. Diese VM verbrauchte auch etwa 90–95 % der CPU, als dieses Programm ausgeführt wurde.
Ich bin noch ziemlich neu in C und Netzwerkprogrammierung. Daher bin ich mir sicher, dass es Verbesserungen gibt, die vorgenommen werden können. Wenn Sie etwas sehen, das verbessert werden kann, lassen Sie es mich bitte wissen :)