Программа AC, которую я создал для отправки UDP-пакетов на указанный IP-адрес и порт назначения через необработанные сокеты. Эта программа поддерживает следующее:
pthreads
(многопоточность).Примечание . Эта программа не поддерживает фрагментацию пакетов, и нет смысла добавлять эту поддержку, поскольку программа создана не для этого.
В настоящее время я изучаю больше об углубленной проверке пакетов, а также о том, как работают (D)DoS-атаки. Я сделал эту программу и использую ее только в своей локальной сети. Я планирую создать серверное приложение UDP, способное фильтровать (D)DoS-атаки и блокировать их с помощью XDP после обнаружения. Этот инструмент будет использоваться для тестирования серверного приложения, которое я буду создавать. В конце концов я буду создавать программное обеспечение, которое будет работать в моей сети Anycast и будет способно отражать обнаруженные (D)DoS-атаки через XDP на всех POP-серверах.
Я использовал GCC для компиляции этой программы. Вы должны добавить -lpthread
в конце команды при компиляции через GCC.
Вот пример:
gcc -g UDP_Sender.c -o UDP_Sender -lpthread
Использование следующее:
Usage: ./UDP_Sender <Source IP> <Destination IP> <Destination IP> [<Max> <Min> <Interval> <Thread Count>]
Обратите внимание, что интервал указан в микросекундах . Полезные данные Min и Max выражаются в байтах . Если вы установите интервал равным 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
до 1200
байт полезных данных каждые 1000
микросекунд. Он будет отправлять эти пакеты из 3
потоков.
С помощью этой программы мне удавалось развивать скорость около 300 Мбит/с (~23 тыс. PPS) в моей локальной сети, пока она не перегрузила мой маршрутизатор и виртуальную машину (у меня есть Edge Router более низкого уровня). Это было без установки интервала и с использованием одного потока. Виртуальная машина, отправляющая информацию, имела 6 виртуальных ЦП и процессор более старой версии Intel Xeon с тактовой частотой 2,4 ГГц. Эта виртуальная машина также использовала около 90–95% ЦП при работе этой программы.
Я все еще новичок в C и сетевом программировании. Поэтому я уверен, что есть улучшения, которые можно сделать. Если вы видите что-то, что можно улучшить, пожалуйста, дайте мне знать :)