Java – how to determine if the incoming connection is from the local computer
•
Java
I have a socketserver that accepts incoming connections For security reasons, I should only allow local connections (from the computer running the server)
How do I determine if incoming connections come from other computers? Is the following code secure?
Socket socket = someServerSocket.accept(); String remoteAddress = socket .getInetAddress().getHostAddress(); if (!fromThisMachine(remoteAddress)) { // Not from this machine. }
The fromthismachine() method is as follows:
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; }
Thank you, Mukhsin
Solution
If you want to restrict the connection from localhost, specify the connection when opening ServerSocket If you listen only on localhost, you can only get a connection from localhost
int port = ..... SocketAddress socketAddress = new InetSocketAddress("127.0.0.1",port); ServerSocket serverSocket = new ServerSocket(); serverSocket.bind(socketAddress); serverSocket.accept();
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码