Tôi có một SocketServer chấp nhận các kết nối đến. Vì lý do bảo mật, tôi chỉ nên cho phép các kết nối cục bộ (các kết nối từ máy mà máy chủ đang chạy).Cách xác định kết nối đến từ máy cục bộ
Làm cách nào để xác định liệu kết nối đến có đến từ một máy khác không? Mã sau có an toàn cho điều này không?
Socket socket = someServerSocket.accept();
String remoteAddress = socket .getInetAddress().getHostAddress();
if (!fromThisMachine(remoteAddress)) {
// Not from this machine.
}
khi fromThisMachine()
phương pháp là như thế này:
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;
}
Cảm ơn, Mohsen
Nó không hoạt động. Xem: Tôi đang ở trên 192.168.0.1 và một người khác trên 192.168.0.2. Tôi muốn từ chối truy cập của mình vào ổ cắm máy chủ của tôi nghe trên 192.168.0.1:port, nhưng giải pháp này không hoạt động. Nó chỉ gây ra rằng kết nối đến 127.0.0.1:port không hoạt động từ máy tính của riêng tôi. – Mohsen
Đây không phải là một anwer cho câu hỏi. Tại sao nó được đánh dấu không chính xác. Các anwers khác cũng sai trong trường hợp này nó nên được mở và không trả lời cho tất cả những người khác đến với cùng một vấn đề. – Lothar