java socket:在接受之前听?

时间:2011-10-17 23:50:40

标签: java security tcp serversocket

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

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

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

感谢。

3 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

编辑:但我不得不承认防火墙是更好的解决方案。