Programme AC que j'ai créé pour envoyer des paquets UDP à une adresse IP et un port de destination spécifiés via des sockets bruts. Ce programme prend en charge les éléments suivants :
pthreads
(multi-threading).Remarque - Ce programme ne prend pas en charge la fragmentation des paquets et il est vraiment inutile d'ajouter cette prise en charge puisque ce n'est pas pour cela que le programme est conçu.
J'en apprends actuellement davantage sur l'inspection approfondie des paquets ainsi que sur le fonctionnement des attaques (D)DoS. J'ai créé ce programme et je ne l'utilise que sur mon réseau local. Je prévois de créer une application serveur UDP capable de filtrer les attaques (D)DoS et de les bloquer à l'aide de XDP une fois détectées. Cet outil sera utilisé pour tester cette application serveur que je vais créer. À terme, je créerai un logiciel qui fonctionnera sur mon réseau Anycast et qui sera capable de supprimer les attaques (D)DoS détectées via XDP sur tous les serveurs POP.
J'ai utilisé GCC pour compiler ce programme. Vous devez ajouter -lpthread
à la fin de la commande lors de la compilation via GCC.
Voici un exemple :
gcc -g UDP_Sender.c -o UDP_Sender -lpthread
L'utilisation est la suivante :
Usage: ./UDP_Sender <Source IP> <Destination IP> <Destination IP> [<Max> <Min> <Interval> <Thread Count>]
Veuillez noter que l'intervalle est en microsecondes . Les charges utiles Min et Max sont en octets . Si vous définissez l'intervalle sur 0, il n'attendra pas entre l'envoi de paquets sur chaque thread.
Voici un exemple :
./UDP_Sender 192.168.80.10 10.50.0.4 27015 1000 1200 1000 3
Ce qui précède envoie en continu des paquets au 10.50.0.4
(port 27015
) et apparaît à partir du 192.168.80.10
(dans mon cas, usurpé). Il envoie entre 1000
et 1200
octets de données utiles toutes les 1000
microsecondes. Il enverra ces paquets à partir de 3
threads.
J'ai pu pousser environ 300 Mbps (~ 23 000 PPS) en utilisant ce programme sur mon réseau local jusqu'à ce qu'il surcharge mon routeur et ma machine virtuelle (j'ai un routeur Edge bas de gamme). C'était sans intervalle défini et en utilisant un seul thread. La VM qui envoyait les informations possédait 6 processeurs virtuels et le processeur était un ancien Intel Xeon cadencé à 2,4 GHz. Cette VM utilisait également environ 90 à 95 % du processeur lors de l'exécution de ce programme.
Je suis encore relativement nouveau dans la programmation C et réseau. Par conséquent, je suis sûr que des améliorations peuvent être apportées. Si vous voyez quelque chose qui pourrait être amélioré, n'hésitez pas à me le faire savoir :)