如何在Java中检查域是否存在?

时间:2011-05-09 06:24:05

标签: java

假设我的电子邮件地址为xyz@yahoo.com,我想检查yahoo.com是否为有效域。

有谁可以告诉我我可以使用哪种Java API?

5 个答案:

答案 0 :(得分:7)

在给定主机名的情况下,

InetAddress具有getByName()方法来确定主机的IP地址。

如果找不到主机的IP地址(如果给定的主机名无效),则会抛出UnknownHostException

因此,您只需在调用UnknownHostException时尝试抓住InetAddress.getByName()。如果捕获UnknownHostException,则表示您的输入主机名无效。

答案 1 :(得分:4)

你可以做的一件事是试图解决“yahoo.com”。像这样:

public static void main(String[] args) throws UnknownHostException {
    InetAddress inetAddress = InetAddress.getByName("yahoo.com");
    System.out.println(inetAddress.getHostName());
    System.out.println(inetAddress.getHostAddress());
}

输出:

yahoo.com
67.195.160.76

答案 2 :(得分:1)

另一种可能性是检查entred域的MX。

http://www.mxtoolbox.com/SuperTool.aspx

它不是Java API,但您始终可以解析HTML响应。

这意味着如果邮件服务的提供者未被列入黑名单,那么它可能是安全的并且是真实的地址。

但正如已经说过的,某些服务器总是可以为这种服务定义安全限制。

另一点是,存在一些提供临时电子邮件的服务(mailinator.com,jetable.org等等)如果您想阻止用户注册这样的电子邮件,您还必须检查这些域名。

<强>更新

我发现useful REST API似乎是免费的,只要你使用有限数量的请求。

示例:https://dns-api.org/MX/amazon.com返回JSON:

[
   {
      "name" : "amazon.com",
      "ttl" : 677,
      "value" : "5 amazon-smtp.amazon.com.",
      "type" : "MX"
   }
]

答案 3 :(得分:1)

您可以使用org.apache.commons.validator.routines.DomainValidator。

首先添加maven依赖

<dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>1.6</version>
</dependency>

然后:

boolean isValid = DomainValidator.getInstance().isValid("yahoo.com");

答案 4 :(得分:-1)

我不知道这是否是最好的方式,但我为VB.NET程序做了类似的事情:

我刚刚ping了域名,如果我没有收到回复,域名要么已离线,要么不存在。