为假装URL地址抛出新的例外

Dem*_*ele 5 java url exception

我做了一些东西,检索我输入的URL的IP地址.

InetAddress ip = InetAddress.getByName("www.fake.cao");
return ia.getHostAddress();
Run Code Online (Sandbox Code Playgroud)

我还抛出了UnknownHostException来尝试捕获错误的URL错误.

问题是,www.fake.cao被识别为真正的URL并返回一个不可用的IP地址,并且不会抛出异常.

任何人都可以告诉我,我能做些什么来捕捉这些自命不凡的URL?

Jav*_*ier 2

问题是您的 ISP 返回一个不存在的 DNS 域的虚假页面。这种(不好的)做法称为 NXDOMAIN 重定向。

JRE 无法辨别 的81.200.64.50实际 IP 地址www.fake.cao,还是您的 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;
Run Code Online (Sandbox Code Playgroud)

此方法并不完整,因为您的 ISP 可能会为不同的不存在的主机返回不同的地址,但至少尝试解决该问题。