들어오는 연결을 수락하는 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
이것은 질문의 anwer가 아닙니다. 잘못 표시된 이유는 무엇입니까? 이 경우에는 다른 문제도 발생합니다. 같은 문제가 떠오르는 다른 모든 사람들에게는 공개되지 않고 답을해야합니다. – Lothar