Повторная отправка сервера syn / ack после отправки ACK - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь реализовать необработанные 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;
}
...