Programa AC que hice para enviar paquetes UDP a una IP y puerto de destino específicos a través de sockets sin formato. Este programa admite lo siguiente:
pthreads
(multiproceso).Nota : este programa no admite la fragmentación de paquetes y realmente no tiene sentido agregar ese soporte ya que el programa no está diseñado para eso.
Actualmente estoy aprendiendo más sobre la inspección en profundidad de paquetes y cómo funcionan los ataques (D)DoS. Hice este programa y solo lo uso en mi red local. Estoy planeando crear una aplicación de servidor UDP que sea capaz de filtrar ataques (D)DoS y bloquearlos usando XDP una vez detectados. Esta herramienta se utilizará para probar esta aplicación de servidor que crearé. Con el tiempo, crearé un software que se ejecutará en mi red Anycast y que será capaz de eliminar ataques (D)DoS detectados a través de XDP en todos los servidores POP.
Usé GCC para compilar este programa. Debe agregar -lpthread
al final del comando al compilar mediante GCC.
He aquí un ejemplo:
gcc -g UDP_Sender.c -o UDP_Sender -lpthread
El uso es el siguiente:
Usage: ./UDP_Sender <Source IP> <Destination IP> <Destination IP> [<Max> <Min> <Interval> <Thread Count>]
Tenga en cuenta que el intervalo está en microsegundos . Las cargas útiles mínimas y máximas están en bytes . Si establece el intervalo en 0, no esperará entre el envío de paquetes en cada hilo.
He aquí un ejemplo:
./UDP_Sender 192.168.80.10 10.50.0.4 27015 1000 1200 1000 3
Lo anterior envía paquetes continuamente al 10.50.0.4
(puerto 27015
) y aparece desde 192.168.80.10
(en mi caso, falsificado). Envía entre 1000
y 1200
bytes de datos de carga útil cada 1000
microsegundos. Enviará estos paquetes desde 3
subprocesos.
Pude alcanzar alrededor de 300 mbps (~23K PPS) usando este programa en mi red local hasta que sobrecargó mi enrutador y mi máquina virtual (tengo un enrutador Edge de gama baja). Esto fue sin intervalo establecido y usando un hilo. La máquina virtual que envió la información tenía 6 vCPU y el procesador era un Intel Xeon más antiguo con una frecuencia de 2,4 GHz. Esta máquina virtual también usaba entre un 90 y un 95 % de CPU cuando este programa se ejecutaba.
Todavía soy bastante nuevo en C y programación de redes. Por lo tanto, estoy seguro de que se pueden realizar mejoras. Si ves algo que se pueda mejorar, dímelo :)