gpt4 book ai didi

c - 在 accept() 之前拒绝客户端的 TCP 连接请求

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:23 30 4
gpt4 key购买 nike

我正在尝试用 C 语言编写 TCP 服务器代码。我刚刚注意到 accept() 函数在连接已建立时返回。

一些客户端充斥着随机数据,一些客户端只发送一次随机数据,之后我想关闭他们当前的连接和 future 的连接几分钟(或更长时间,取决于程序有多少负载)。

我可以将错误的客户端 IP 地址保存在一个数组中,也可以保存时间,但我找不到任何用于中止当前连接或拒绝来自错误客户端的 future 连接的函数。

我发现了一个名为 WSAAccept 的 Windows 操作系统功能,它允许您根据用户选择拒绝连接,但我不使用 Windows 操作系统。

我尝试了代码原始 TCP 服务器,它允许您从一开始就访问 TCP 数据包,包括所有 TCP header ,并且它不会自动接受连接。我尝试通过程序端处理连接,包括 SYN ACK 和其他 TCP 信号。它工作正常,但后来我注意到原始 TCP 服务器接收我网络接口(interface)中的所有数据包,当其他程序使用高流量时,它也会使我的程序延迟。

我尝试使用 libnetfilter,它允许您过滤网络接口(interface)中的全部流量。它也可以工作,但像原始 TCP 服务器一样,它也接收整个网络接口(interface)的数据包,这使得它在有大量流量时变慢。我还尝试将 libnetfilter 与 iptables 进行比较。 libnetfilter 比 iptables 慢。

总而言之,我如何才能在不伤害其他客户端连接的情况下中止客户端的当前和 future 连接?

我有带 debian 10 的 linux。

最佳答案

一旦您在数据包级别加入黑名单,您可能很快就会受到基于 IP 欺骗的非常微不足道的攻击。对于一个非常基本的实现,攻击者可以使用您的数据包级别黑名单将他想要的任何人列入黑名单,只需向您发送许多带有虚假源 IP 地址的数据包。通常你不想接触这些过滤(除非你真的知道你在做什么)并且你只是信任你的防火墙等。

所以我真的建议在从accept 获取文件描述符后立即关闭 文件描述符。

关于c - 在 accept() 之前拒绝客户端的 TCP 连接请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57872650/

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