基于IP限制传入TCP连接数

4

在C语言中,套接字是否提供了一种基于IP地址限制套接字的传入连接数量的方式?

例如,为了防止一个客户端IP发送垃圾连接,有没有办法限制该IP连接到套接字的次数?

或者,这样的功能是否需要自定义实现?


1
你为什么问?你在考虑什么样的服务器?我相信connect的成本比send更高。阅读关于C10K问题的文章http://en.wikipedia.org/wiki/C10k_problem。 - Basile Starynkevitch
1
在防火墙上执行此操作更容易 - 例如在Linux上的iptables。 - Julian
3个回答

1

在套接字中没有这样的东西。您需要定制解决方案,最好考虑在防火墙中完成。


1

我感觉你所说的真正意图是限速,即针对特定客户端/连接,在给定时间内只允许固定数量的数据包传输。这听起来比允许/禁止更多连接的使用场景更为现实。

大多数现代语言都提供了一些支持,例如Java或C#,但C语言不支持。

然而,这里有一种优雅的实现方法。我自己在生产代码中使用过它。

实现限速


1

标准套接字API中没有这方面的内容。使用标准API,服务器代码唯一能做的就是accept()客户端连接,检查其IP地址,然后在需要时关闭连接。

在Microsoft的WinSock API中,WSAAccept()函数具有回调功能,在从服务器队列中接受连接之前会调用该回调函数。回调函数可以决定接受连接、拒绝连接或将其留在队列中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接