Я кодировал небольшой инструмент, который просто генерирует пакет синхронизации на любой IP-адрес и номер порта, который вы ему даете, - и когда я вызывал Wireshark, отправленный пакет выглядит нормально, без ошибок или чего-то еще, он выглядит так же, как ваш типичный пакет TCP SYN.
По какой-то причине ACK не отправляется сервером. Итак, есть две проблемы; один, нет ответа ACK. Во-вторых, я даже не знаю, как получить ответ ack через мою программу (bind ()?).
Я изменил какой-то код из syn flooder, который я нашел в Интернете, потому что мне показалось, что некоторый код script-kiddie будет легко следовать, но я боюсь, что он может что-то упустить и может быть результатом того, что сервер ACK отрицание. Код был изменен, поэтому запрос синхронизации отправляется с допустимого IP-адреса. Следующий код показывает мои заголовки ip + tcp:
iph->ihl = 5;
iph->version = 4;
iph->tos = 0;
iph->tot_len = sizeof (struct ip) + sizeof (struct tcphdr);
iph->id = htonl (54321); //Id of this packet
iph->frag_off = 0;
iph->ttl = 255;
iph->protocol = 6;
iph->check = 0; //Set to 0 before calculating checksum
iph->saddr = 0; //Source ip filled in by kernel
iph->daddr = sin.sin_addr.s_addr;
//TCP Header
tcph->source = htons (9999);
tcph->dest = htons (atoi(argv[2]));
tcph->seq = random ();
// tcph->ack_seq = 0;
tcph->doff = 5; /* first and only tcp segment */
tcph->syn = 1;
tcph->window = htonl (65555); /* maximum allowed window size */
tcph->check = 0;/* if you set a checksum to zero, your kernel's IP stack
should fill in the correct checksum during transmission */
tcph->urg_ptr = 0;
//Now the IP checksum
iph->check = csum ((unsigned short *) datagram, iph->tot_len >> 1);
Итак, я отправляю это, не обратно. Чего мне не хватает?