【问题标题】:Limit Incoming TCP Connections based on IP根据 IP 限制传入的 TCP 连接
【发布时间】:2012-11-01 19:43:12
【问题描述】:

C 中的套接字是否提供任何方式来根据 IP 限制到套接字的传入连接数?

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

或者这样的东西必须定制吗?

【问题讨论】:

  • 你为什么要问?你在想什么样的服务器?我相信connect-ing 的成本高于send-ing。阅读 C10K 问题en.wikipedia.org/wiki/C10k_problem
  • 在防火墙中更容易实现 - 例如 linux 上的 iptables。

标签: c sockets networking tcp


【解决方案1】:

我觉得您所说的真正意图是节流,即针对特定客户端/连接,在给定时间内仅允许固定数量的数据包。这听起来比允许/禁止更多连接更现实的使用场景。

大多数现代语言都提供某种支持,例如 java 或 c#,但不提供 c。

但是,这里有一个优雅的方法来实现它。我自己在生产代码中使用过它。

implementing throttling

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      对于 Microsoft 的 WinSock API,WSAAccept() 函数确实有一个回调,在从服务器队列接受连接之前调用该回调。回调函数可以决定是接受连接、拒绝连接还是将其留在队列中。

      【讨论】:

        猜你喜欢
        • 2010-09-29
        • 2010-11-17
        • 2020-10-16
        • 2012-11-19
        • 1970-01-01
        • 2010-10-20
        • 2010-11-03
        • 1970-01-01
        • 2012-11-09
        相关资源
        最近更新 更多