上下文:由於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