【问题标题】:Check IP before accepting asio::IP::TCP socket在接受 asio::IP::TCP 套接字之前检查 IP
【发布时间】:2016-02-29 13:44:54
【问题描述】:

在接受连接之前,是否可以在服务器/接受者端检查远程主机的IP?

背后的原因:我有 n 个客户端经常尝试连接到服务器,我不想经常有 n 个打开的连接。相反,我希望能够选择要连接的客户端,并且仅在需要时接受这些连接。

不幸的是,连接需要从客户端启动,因此由于防火墙和策略的原因,需要以相反的方式启动。

从 TCP 的角度来看,这是否可能?如何在 asio 中做到这一点?

【问题讨论】:

  • 客户端发起连接听起来像是正常的连接方式。至于你的问题,没有标准的“窥视”传入连接的方法是队列,只有当你接受连接后,你才能得到它的地址。而且它也是解除连接的唯一标准方式,您不能“关闭”传入队列中的连接。
  • 嗯,好的,谢谢,那我得想个办法。
  • @user66875 可能不会。您可以只接受连接,获取远程 IP 地址(请参阅 here )并在您不喜欢该客户端时关闭该连接。

标签: c++ boost boost-asio


【解决方案1】:

有两种方法:

  1. 您接受连接并获取对等地址,检查并关闭它。您也可以借此机会告诉客户端服务器正忙。然而,这在不利方面可能会为大量连接请求打开攻击向量。

  2. 您在运行时修改防火墙,使用类似 fail2ban。

顺便问一下,是什么让你不愿意保持N个开放连接?现代系统可以毫无问题地处理数十万甚至数百万的连接。

【讨论】:

  • 谢谢,我会尝试实现1)。我不知道打开这么多连接不会成为性能问题
猜你喜欢
  • 2014-04-08
  • 1970-01-01
  • 2023-03-19
  • 2020-05-22
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多