簡體   English   中英

java socket:在接受之前聽?

[英]java socket: listen before accept?

上下文:由於DOS攻擊,我在我的程序內存中的某個集合中有一張禁止ip地址的表。

我使用TCP服務器套接字,接受每個連接,然后檢查IP地址,然后我關閉連接或繼續處理客戶端。

我想知道在Java中是否可以監聽TCP服務器套接字上的連接,並在給定請求客戶端的IP地址的情況下接受或拒絕以某種方式建立tcp鏈接。 我的意思是不必接受&關閉客戶端套接字,這是我已經在做的事情。

謝謝。

在不使用SecurityManager的情況下 ,您只能接受,然后檢查傳入的IP地址,並刪除連接(如果它在禁止列表中)。 使用SecurityManager ,您可以讓它拋出SecurityException ,並為其提供特殊處理(例如在應用程序的安全日志中記錄連接請求)。

如果你不希望這些連接甚至命中你的服務器(我猜這是重點),你真的想在防火牆級別阻止它。 一旦連接到達您的應用程序,它已經占用了與您的應用程序通信所需的內存和資源,所以此時您已經丟失了DOS / DDOS游戲。

在接受之前或之后刪除它並不重要,因為連接已經達到了應用程序的應用程序級別。 即使使用SecurityManager ,它仍然會增加服務器的負載。

您可能可以,但無論如何您都無法阻止他們使用Java代碼訪問您的系統。

你最好的選擇是,而不是使用Java,使用類似iptables或其他防火牆的東西立即丟棄他們的數據包。

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

如果您可以使用.policy文件中定義的地址或編寫自己的Policy對象,則可以使用具有合適的Accept SocketPermissions定義的SecurityManager。

編輯:但我不得不承認防火牆是一個更好的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM