我有一個SocketServer接受傳入連接。出於安全原因,我應該只允許本地連接(從運行服務器的機器連接)。如何確定傳入連接來自本地機器
如何確定傳入連接是否來自另一臺計算機?以下代碼是否安全?
Socket socket = someServerSocket.accept();
String remoteAddress = socket .getInetAddress().getHostAddress();
if (!fromThisMachine(remoteAddress)) {
// Not from this machine.
}
而fromThisMachine()
方法是這樣的:
public boolean fromThisMachine(String remoteAddress) {
try {
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = interfaces.nextElement();
Enumeration<InetAddress> addresses = networkInterface.getInetAddresses();
while (addresses.hasMoreElements()) {
InetAddress inetAddress = addresses.nextElement();
String hostName = inetAddress.getHostName();
String hostAddr = inetAddress.getHostAddress();
if (hostName.equals(remoteAddress) || hostAddr.equals(remoteAddress)) {
return true;
}
}
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
log("Unauthorized request to server from: " + remoteAddress);
return false;
}
感謝, 穆赫辛
它不起作用。請參閱: 我在192.168.0.1和192.168.0.2上的其他人。我想拒絕他訪問偵聽192.168.0.1:port的服務器套接字,但此解決方案不起作用。它只會導致連接到127.0.0.1:port無法在我自己的機器上工作。 – Mohsen 2009-10-09 08:30:38
這不是問題的重點。爲什麼它被錯誤標記。其他情況也是錯誤的,在這種情況下,應該讓所有其他提出同樣問題的人保持開放並且沒有答案。 – Lothar 2015-12-07 01:31:48