着信接続を受け入れるSocketServerがあります。セキュリティ上の理由から、ローカル接続(サーバーが稼働しているマシンからの接続)のみを許可する必要があります。着信接続を確認する方法はローカルマシンからです
着信接続が別のマシンからのものかどうかを確認するにはどうすればよいですか?次のコードは安全ですか?
Socket socket = someServerSocket.accept();
String remoteAddress = socket .getInetAddress().getHostAddress();
if (!fromThisMachine(remoteAddress)) {
// Not from this machine.
}
fromThisMachine()
方法は次のようである間:あなたはServerSocketのを開くとことを指定した後、ローカルホストからの接続を制限する場合
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
これは疑問のアンカーではありません。なぜそれは間違ってマークされます。この場合、他のアンワースも間違っています。同じ問題を抱える他のすべての人々にとっては未解決のままにすべきです。 – Lothar