원시 소켓을 통해 UDP 패킷을 지정된 대상 IP 및 포트로 보내기 위해 만든 AC 프로그램입니다. 이 프로그램은 다음을 지원합니다.
pthreads
(멀티스레딩).참고 - 이 프로그램은 패킷 조각화를 지원하지 않으며 프로그램의 목적이 아니기 때문에 해당 지원을 추가할 필요가 없습니다.
저는 현재 (D)DoS 공격이 작동하는 방식과 함께 심층 패킷 검사에 대해 더 많이 배우고 있습니다. 저는 이 프로그램을 만들어서 로컬 네트워크에서만 사용하고 있습니다. (D)DoS 공격을 필터링하고 감지되면 XDP를 사용하여 차단할 수 있는 UDP 서버 애플리케이션을 만들 계획입니다. 이 도구는 제가 만들 서버 애플리케이션을 테스트하는 데 사용됩니다. 결국 저는 모든 POP 서버에서 XDP를 통해 감지된 (D)DoS 공격을 삭제할 수 있는 Anycast 네트워크에서 실행되는 소프트웨어를 만들 예정입니다.
나는 이 프로그램을 컴파일하기 위해 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>]
간격은 마이크로초 단위입니다. 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
마이크로초마다 1000
~ 1200
바이트의 페이로드 데이터를 전송합니다. 3
스레드에서 이러한 패킷을 보냅니다.
내 라우터와 VM에 과부하가 걸릴 때까지 내 로컬 네트워크에서 이 프로그램을 사용하여 약 300mbps(~23K PPS)를 푸시할 수 있었습니다(저사양 Edge Router가 있습니다). 간격이 설정되지 않고 하나의 스레드를 사용했습니다. 정보를 보내는 VM에는 6개의 vCPU가 있었고 프로세서는 2.4GHz로 클럭되는 이전 Intel Xeon이었습니다. 또한 이 VM은 이 프로그램을 실행할 때 약 90~95%의 CPU를 사용했습니다.
저는 아직 C와 네트워크 프로그래밍에 익숙하지 않습니다. 따라서 개선할 수 있는 부분이 있다고 확신합니다. 개선할 점을 발견하시면 알려주세요 :)