加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为假装URL地址抛出新的异常

发布时间:2020-12-14 06:08:40 所属栏目:Java 来源:网络整理
导读:我做了一些东西,检索我输入的URL的IP地址. InetAddress ip = InetAddress.getByName("www.fake.cao");return ia.getHostAddress(); 我还抛出了UnknownHostException来尝试捕获错误的URL错误. 问题是,www.fake.cao被识别为真正的URL并返回一个不可用的IP地址,

我做了一些东西,检索我输入的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;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读