java socket:在接受之前听?

上下文:由于DOS攻击,我在我的程序内存中的某个集合中有一张禁止ip地址的表。

我使用TCP服务器套接字,接受每个连接,然后检查IP地址,然后我关闭连接或继续处理客户端。

我想知道在Java中是否可以监听TCP服务器套接字上的连接,并接受或拒绝以某种方式建立tcp链接,给定请求客户端的IP地址。 我的意思是不必接受&关闭客户端套接字,这是我已经在做的事情。

谢谢。

在不使用SecurityManager的情况下 ,您只能接受,然后检查传入的IP地址,并删除连接(如果它在禁止列表中)。 使用SecurityManager ,您可以让它抛出SecurityException ,并为其提供特殊处理(例如在应用程序的安全日志中记录连接请求)。

如果你不希望这些连接甚至命中你的服务器(我猜这是重点),你真的想在防火墙级别阻止它。 一旦连接到达您的应用程序,它已经占用了与您的应用程序通信所需的内存和资源,所以此时您已经丢失了DOS / DDOS游戏。

在接受之前或之后删除它并不重要,因为连接已经达到了应用程序的应用程序级别。 即使使用SecurityManager ,它仍然会增加服务器的负载。

您可能能够,但无论如何,您都无法阻止他们使用Java代码访问您的系统。

你最好的选择是,而不是使用Java,使用类似iptables或其他防火墙的东西立即丢弃他们的数据包。

在服务器故障的男孩可能比SO更好地帮助。

如果您可以使用.policy文件中定义的地址或编写自己的Policy对象,则可以使用具有合适的接受SocketPermissions的SecurityManager。

编辑:但我必须承认防火墙将是一个更好的解决方案。