我有一個端口上運行的服務器端口7761在我的服務器與ip說10.2.110.43 現在有很多客戶端運行在不同的服務器上等待端口7761上的連接,以ascii格式將數據寫入該端口。服務器套接字接受來自特定ip的連接java
我想要serversocket驗證client-ipadress,然後接受來自客戶端的連接。
有沒有辦法做到這一點?
我有一個端口上運行的服務器端口7761在我的服務器與ip說10.2.110.43 現在有很多客戶端運行在不同的服務器上等待端口7761上的連接,以ascii格式將數據寫入該端口。服務器套接字接受來自特定ip的連接java
我想要serversocket驗證client-ipadress,然後接受來自客戶端的連接。
有沒有辦法做到這一點?
如果您不介意在SecurityManager
下運行,並且IP地址列表是靜態的,您可以通過security.policy
文件完成此操作。只需將SocketPermission "accept"
授予您想要接受連接的IP地址即可。然而,在代碼或防火牆中按照其他答案中的建議進行操作可能更可取。
我也一直在代碼中這樣做,但認爲你這樣建議的方式實際上要乾淨得多。你也可以更容易地配置範圍,因爲列表在文件中(儘管做類似的代碼也很容易)。 – PSIXO
我們看到在下面的代碼,我們不能前accept()
但之後檢查對口地址:
Socket client = serverSocket.accept()
if(acceptedClients.contains(client.getInetAddress()) {
...
}
else {
client.close();
}
隨着acceptedClients
衆所周知InetAddress類的集合。
如果您不希望連接到達您的Java ServerSocket#accept()
,除非它來自特定的IP,則必須將防火牆配置爲執行此操作。
建立連接後,您可以隨時驗證IP地址,如果不是來自正確的IP,請立即關閉IP地址。
什麼阻止你在代碼中驗證客戶端IP? – Manish