我可以在 Linux 中使用原始套接字创建侦听 TCP 套接字吗?

raw*_*ket 4 sockets network-programming

我想创建一个侦听 TCP 套接字,在其中我可以控制它在收到来自客户端的初始 SYN 数据包后何时使用第一个 SYN+ACK 响应客户端。

我想这样做是为了引入一些延迟或忽略一些初始 SYN 数据包。我现在可以使用 iptables 来完成此操作,但我想知道是否可以使用操作系统套接字接口来完成此操作。

请注意,如果我使用普通的 TCP 套接字,一旦服务器在套接字描述符上调用listen(),操作系统就会在客户端连接到它时建立连接。

我想知道是否可以使用原始套接字来实现此行为。到目前为止,我看到的有关原始套接字的所有示例都是关于主动套接字(客户端到服务器)而不是被动套接字(侦听套接字)。

eat*_*ter 5

理论上,您可以通过原始套接字编写自己的 TCP 实现。但在原始套接字获得副本之前,内核仍会响应任何传入的 TCP 数据包。因此,您必须使用 iptables 或其他东西来阻止内核查看您感兴趣的数据包来解决此问题。

我认为通过 netfilter 接口在内核模块中执行此操作会更容易(这可能是您已经在做的事情)。libnetfilter_queue如果您确实想在用户空间中执行此操作,您还可以检查哪个可能有效。