問題は、ISPが存在しないDNSドメインの偽のページを返すことです。その(悪い)慣行は、NXDOMAINリダイレクトとして知られています。
JRE81.200.64.50
は、の実際のIPアドレスなのwww.fake.cao
か、ISPによって挿入された偽のページなのかを判断できません。
実際にソケットを開こうとして接続するかどうかを確認する以外に(たとえば、HTTP接続を開こうとした場合など、ホストが存在しない場合でも接続できることに注意してください)、そのホストに対して返されたIPを比較できます。すでに無効であることがわかっているホスト(などdoes-not-exist.invalid
)の返されるIPを使用します。
InetAddress ip = InetAddress.getByName("www.fake.cao");
InetAddress fake;
try {
fake = InetAddress.getByName("does-not-exist.invalid");
} catch (UnknownHostException e) {
//www.fake.cao exists, but invalid does not
return ip;
}
if (Arrays.equals(ip.getAddress(),fake.getAddress())) {
//both ip and fake resolves to the same IP
throw new UnknownHostException();
}
//invalid does exist, but it is different from ip
return ip;
ISPが存在しないホストごとに異なるアドレスを返す可能性があるため、このアプローチは完全ではありませんが、少なくとも問題に対処しようとします。