java - 为伪装的 URL 地址抛出新的异常

标签 java url exception

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

InetAddress ip = InetAddress.getByName("www.fake.cao");
return ia.getHostAddress();

我还抛出 UnknownHostException 以 try catch 不正确 URL 的错误。

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

谁能告诉我如何才能捕获这些自命不凡的 URL?

最佳答案

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

JRE 无法判断81.200.64.50www.fake.cao 的真实IP 地址,还是您的ISP 注入(inject)的虚假页面。

除了实际尝试打开一个套接字并检查它是否连接(请注意,即使主机不存在,它也可以连接,例如,如果您尝试打开一个 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 可能会为不同的不存在的主机返回不同的地址,但至少会尝试解决这个问题。

关于java - 为伪装的 URL 地址抛出新的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15467013/

相关文章:

java - HttpClient 发布请求 URL 的问题,Java 中没有变化

C# 异常处理继续出错

PHP try catch block 不捕获

java - IntelliJ cucumber .ClassNotFoundException

java - IO 异常 : "/root/test outside/opt/h2/DB

java - 同步方法中的 BlockedLinkedQueue 死锁

apache - 使用 Apache mod 重写更改 Joomla 中的站点 URL

regex - 我如何在 Django 中编写此 URL?

java - 如何使用 Weblogic 访问文件?

java - java中异常重新抛出