gpt4 book ai didi

c - syn 后检索 ack

转载 作者:太空狗 更新时间:2023-10-29 12:06:42 25 4
gpt4 key购买 nike

我编写了一个小工具,它只在您提供的任何 ip 和端口号处抛出一个 syn 数据包——当我弹出 Wireshark 时,发送的数据包看起来很好,没有错误或任何东西,它看起来就像您的典型的 TCP SYN 数据包。

由于某种原因,服务器没有发送 ACK。所以,有两个问题;一、没有ACK响应。第二,我什至不知道如何通过我的程序接收 ack 响应(bind()?)。

我修改了一些我在网上找到的 syn flooder 的代码,因为在我看来,一些 script-kiddie 代码很容易理解,但我担心它可能会遗漏一些东西,并且可能是服务器的结果ACK 拒绝。代码已被修改,因此 syn 请求是从合法 IP 地址发送的。以下代码显示了我的 ip+tcp header :

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

所以,我发送了那个,没有回复。我错过了什么?

最佳答案

行:

   tcph->window = htonl (65555);

可能会导致问题。因为 65555 比 0xFFFF 大。window 字段大小为 16 位。

所以这可能会更好:

   tcph->window = htons (65535);

注意:htonl 已更改为 htons。

编辑:

或者更好(如果内容可用):

   tcph->window = htons (TCP_MAXWIN);

问题也可能在于缺少 TCP 校验和计数。您的代码假定较低层更新 TCP 校验和字段。因为不是所有网卡都支持TCP checksum offload ,该代码可能不适用于每个主机。

关于c - syn 后检索 ack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9262467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com