【发布时间】:2011-07-10 16:42:54
【问题描述】:
我的游戏服务器现在接受来自每个人的套接字。但是如何阻止特定 IP 的攻击呢?你知道,如果他们想使我的服务器崩溃或其他什么。我正在使用 SFML 库,C++。
【问题讨论】:
-
你在使用 SFML SocketTCP 和 SocketUDP 类吗?
标签: c++ tcp network-programming udp sfml
我的游戏服务器现在接受来自每个人的套接字。但是如何阻止特定 IP 的攻击呢?你知道,如果他们想使我的服务器崩溃或其他什么。我正在使用 SFML 库,C++。
【问题讨论】:
标签: c++ tcp network-programming udp sfml
使用 TCP,当您的程序(或您正在使用的库)调用 accept(2) 时,第二个参数是一个输出,它告诉您客户端的地址。
使用 UDP 没有连接,但有 recvfrom(2),就像 accept(2) 一样,为您提供对等方的地址。所以你可以忽略你不喜欢的同行。
或者您可以在某种防火墙设备后面运行您的服务器并在那里添加规则,或者在主机上使用 iptables 或类似软件作为防火墙。
在 SFML 中,您有 SocketTCP::Accept 和 SocketUDP::Receive,如果您将空地址作为参数传递,它们都会为您提供对等方的地址。
【讨论】:
accept()之后,检查返回的IP,如果IP被列入黑名单(或未列入白名单),则关闭连接。
我不知道阻止某些 ip 的任何具体方法,但您肯定可以在确定原始 ip 后拒绝请求(在您的情况下可能是连接请求)。维护一个被阻止的 ip(或黑名单 ip)列表(使其可配置以便更容易添加/删除)并拒绝来自黑名单 ip 之一的请求。
【讨论】:
在 Windows 下,WinSock 2.x 有一个可选的 WSAAccept() 回调参数,可用于有条件地接受/拒绝连接请求。客户端 IP/端口是可用参数之一。
【讨论】: