在 Linux/C++ TCP 服务器中,我需要防止恶意客户端打开多个套接字,否则他们可能只会打开数千个连接,直到服务器崩溃。
检查同一台计算机是否已在服务器上建立连接的标准方法是什么?如果我根据 IP 地址进行操作,那是否意味着同一屋子里的两个人即使在不同的计算机上也无法同时连接到服务器?
任何信息都有帮助! 提前致谢。
最佳答案
TCP 本身并没有真正提供除用于识别客户端的 IP 地址之外的任何内容。几个(非排他性的)选项:
1) 将来自任何 IP 地址的连接数限制为合理的数量,例如 10 或 20(取决于您的系统实际执行的操作。)这样,它将防止恶意 DoS 攻击,但仍允许合理的可用性。
2) 将最大连接数限制在合理范围内。
3) 您可以将此委托(delegate)给更高层的解决方案。作为协议(protocol)的一部分,让客户端发送一个仅生成一次的唯一标识符(每次安装等)。然而,这很容易被欺骗。
我相信 1 和 2 是处理它的服务器数量。将它们放在配置文件中,以便根据场景对其进行调整。
关于C++ - 检测到服务器的多个连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16268722/