我发送ACK后服务器重新发送syn / ack

时间:2019-10-22 07:49:54

标签: c++ c tcp raw-sockets whois

我正在尝试实现原始tcp连接,以将查询发送到whois服务器。在我发送syn数据包后,服务器用syn / ack答复(然后我的PC发送了第一个数据包,但是防火墙规则解决了此问题)。之后,我发送seq = 1的ack数据包(第一个数据包的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;
}

0 个答案:

没有答案