Tengo un SocketServer que acepta las conexiones entrantes. Por razones de seguridad, solo debería permitir conexiones locales (conexiones desde la máquina en la que se ejecuta el servidor).Cómo determinar una conexión entrante desde la máquina local
¿Cómo puedo determinar si una conexión entrante es de otra máquina? ¿El siguiente código es seguro para esto?
Socket socket = someServerSocket.accept();
String remoteAddress = socket .getInetAddress().getHostAddress();
if (!fromThisMachine(remoteAddress)) {
// Not from this machine.
}
mientras fromThisMachine()
método es la siguiente:
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;
}
Gracias, Mohsen
No funciona. Ver: Estoy en 192.168.0.1 y alguien más en 192.168.0.2. Quiero negarle el acceso al socket de mi servidor escuchando en 192.168.0.1:port, pero esta solución no funciona. Solo causó que la conexión a 127.0.0.1:port no funcione desde mi propia máquina. – Mohsen
Esto no responde a la pregunta. Por qué está incorrectamente marcado Las otras torres también son incorrectas, en este caso debe dejarse abierta y sin respuesta para todas las demás personas que tengan el mismo problema. – Lothar