gpt4 book ai didi

c++ - 当通过原始套接字接收到 "syn ack"数据包时,如何使用 "syn"数据包进行响应?

转载 作者:行者123 更新时间:2023-11-28 08:08:50 24 4
gpt4 key购买 nike

我对原始套接字以及如何创建它们感到好奇,并且想实现我自己的 TCP 机制。我已经阅读了一些示例,并成功地发送了带有我自己编写的 IP header 的自定义 TCP 数据包和 UDP 数据包(当然受到很多示例的影响)。我已使用 Wireshark 检查数据包是否已到达目的地,所以到目前为止一切正常。

但对于 TCP 数据包,要进行完整的握手:

Client     Server
syn --->
<--- syn ack
ack --->

从服务器的角度来看,我需要什么来获取 syn 数据包,以便我可以将 syn ack 发送回客户端?

最佳答案

要在原始套接字上接收数据包,只需对其调用recvrecvfrom。操作系统将向您返回下一个发往机器的数据包的拷贝,其中包含 header 和所有内容,其中应包括地址信息。查看目标地址、端口和传输协议(protocol),并忽略任何不是您所期望的。 (由于原始套接字的要点是没有内置的端口概念或操作系统可以用来将数据包路由到套接字的任何东西,它不知道将它发送到哪个程序......所以每个原始套接字都应该接收每个数据包都发送到机器。这意味着您可能会收到很多您不感兴趣的垃圾。)

一旦您看到一个发送给“您”的数据包,只需构建一个 SYN/ACK 数据包并将其发送到在接收到的数据包中作为源列出的地址和端口。

但请注意:操作系统通常会自己处理 TCP 和 UDP 数据包(包括发送 ICMP“无法访问的端口”或对它没有监听器的端口的其他响应)......并在最重要的是肯定会引起古怪。如果你打算实现你自己的 TCP,你可能想要使用不同的协议(protocol)号。 (当然,那么大多数客户端将无法连接到它......你也必须创建一个客户端。)

关于c++ - 当通过原始套接字接收到 "syn ack"数据包时,如何使用 "syn"数据包进行响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9599354/

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