Ich habe einen SocketServer akzeptieren eingehende Verbindungen. Aus Sicherheitsgründen sollte ich nur lokale Verbindungen erlauben (Verbindungen von dem Rechner, auf dem der Server läuft).So ermitteln Sie eine eingehende Verbindung vom lokalen Rechner
Wie kann ich feststellen, ob eine eingehende Verbindung von einer anderen Maschine stammt? Ist der folgende Code sicher?
Socket socket = someServerSocket.accept();
String remoteAddress = socket .getInetAddress().getHostAddress();
if (!fromThisMachine(remoteAddress)) {
// Not from this machine.
}
während fromThisMachine()
Methode ist wie folgt:
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;
}
Danke, Mohsen
Es funktioniert nicht. Siehe: Ich bin auf 192.168.0.1 und jemand anderes auf 192.168.0.2. Ich möchte seinen Zugriff auf meinen Server-Socket auf 192.168.0.1: Port verweigern, aber diese Lösung funktioniert nicht. Es hat nur dazu geführt, dass die Verbindung zu 127.0.0.1:port von meinem eigenen Rechner aus nicht funktioniert. – Mohsen
Dies ist keine Antwort auf die Frage. Warum ist es falsch markiert? Die anderen Antworten sind auch falsch in diesem Fall sollte es offen und unbeantwortet für alle anderen Menschen, die das gleiche Problem haben. – Lothar