InetAddress.getByName 为不存在的主机返回“akamaitechnologies.com

问题描述

我发现解析一个不存在的主机名总是会返回一个属于“akamaitechnologies.com”的地址(例如 23.221.222.250)。它确实可以正常运行确实存在的主机。

代码

InetAddress addr = InetAddress.getByName( "NON-EXISTING.com" );

InetAddress 或 Google 搜索的文档提供的帮助很小。据称应该发生 UnkNownHostException ,但对我来说没有发生。

为什么会这样?

解决方法

这不是 Android/Java 缺陷。事实证明这是一个DNS问题。也就是说,我的 AT&T 手机使用 AT&T 的默认 DNS 服务器 (sbcglobal.net)。这个 P.O.S.服务器返回一个有效的 IP 地址即使对于不存在的域。在我更改为“dns.google”(8.8.8.8)后,一切都按预期进行。

这种 DNS 欺骗是一件坏事,因为许多应用程序依赖于 Unknown-Host-Exception 来检测错误输入的域,例如在电子邮件地址中。