我做了一些东西,检索我输入的URL的IP地址.
InetAddress ip = InetAddress.getByName("www.fake.cao");
return ia.getHostAddress();
我还抛出了UnknownHostException来尝试捕获错误的URL错误.
问题是,www.fake.cao被识别为真正的URL并返回一个不可用的IP地址,并且不会抛出异常.
任何人都可以告诉我,我能做些什么来捕捉这些自命不凡的URL?
最佳答案
问题是您的ISP为不存在的DNS域返回虚假页面.这种(坏)练习称为NXDOMAIN重定向.
JRE无法判断81.200.64.50是否是www.fake.cao的实际IP地址,或者是您的ISP注入的虚假页面.
除了实际尝试打开套接字并检查它是否连接(请注意即使主机不存在也可以连接,例如,如果您尝试打开HTTP连接),您可以比较该主机的返回IP,使用已知为无效主机的返回IP(例如does-not-exist.invalid).
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;