Я пытаюсь реализовать необработанные TCP-соединения для отправки запроса на whois-сервер. После того, как я отправляю syn пакетный сервер отвечает syn / ack (тогда мой компьютер отправляет первый пакет, но правило брандмауэра решило эту проблему)После этого я отправляю ack-пакет с seq = 1 (первый пакет имеет seq, установленный в 0) и ack vlaue, установленный в единицу (плюс я устанавливаю флаги в ACK). Проблема в том, что сервер игнорирует этот ack-пакет ... Иногда он отправляет еще несколько syn / acks, иногда он ничего не отправляет после моего ack-пакета (также принимая пакет запроса whois ...). Я думаю, что проблема где-то в моей реализации пакета ACK, но я не могу узнать, где ... Любая помощь или советы будут оценены :)
void create_tcp_header(struct tcphdr *tcph, unsigned short source_port, unsigned short destination_port, int syn, int fin, int seq, int ack)
{
if (ack == 1)
{
tcph->ack = htonl(ack);
tcph->th_flags |= TH_ACK;
}
else
{
tcph->ack = 0;
}
tcph->syn = syn;
tcph->rst = 0;
tcph->source = source_port;
tcph->dest = destination_port;
tcph->urg = 0;
tcph->fin = fin;
tcph->psh = 0;
tcph->window = htons(TCP_MAXWIN);
tcph->urg_ptr = 0;
tcph->seq = htonl(seq);
tcph->ack_seq = htonl(seq);
tcph->doff = 5;
tcph->check = 0;
}