上下文:由于DOS攻击,我有一张禁止ip地址表,位于我程序内存某处的某个集合中。java socket:在接受之前收听?
我使用TCP服务器套接字,接受每个连接,然后检查IP地址,然后我关闭连接或继续处理客户端。
我想知道在Java中是否有可能侦听TCP服务器套接字上的连接,并且接受或拒绝某种方式建立tcp链接(给定请求客户端的IP地址)。我的意思是不必接受&来关闭客户端套接字,这正是我已经在做的事情。
谢谢。
上下文:由于DOS攻击,我有一张禁止ip地址表,位于我程序内存某处的某个集合中。java socket:在接受之前收听?
我使用TCP服务器套接字,接受每个连接,然后检查IP地址,然后我关闭连接或继续处理客户端。
我想知道在Java中是否有可能侦听TCP服务器套接字上的连接,并且接受或拒绝某种方式建立tcp链接(给定请求客户端的IP地址)。我的意思是不必接受&来关闭客户端套接字,这正是我已经在做的事情。
谢谢。
如果不使用SecurityManager,则只能接受,然后检查传入的IP地址,并在连接被禁止列表中时删除该连接。使用SecurityManager,你可以让它发出SecurityException,并给它特殊的处理(例如在应用中的安全日志中记录连接请求)。
如果你不希望这些连接甚至打你的服务器(我猜测这是重点),你真的想在防火墙级别阻止它。一旦连接击中你的应用程序,它已经占用了与你的应用程序交谈所需的内存和资源,所以那时你已经失去了DOS/DDOS游戏。
在接受之前或之后删除它并不重要,因为连接已经达到应用程序的应用程序级别。即使使用SecurityManager,它仍然会增加服务器的负载。
您可能可以,但是无论如何,您无法阻止他们在您的Java代码中访问您的系统。
最好的办法是,不要使用Java,而应使用诸如iptables
之类的东西或其他防火墙来立即丢弃它们的数据包。
在serverfault的男孩可能比SO更好地帮助。
不知道! – Joel