【问题标题】:How to check validity of a subdomain in java? [closed]如何在java中检查子域的有效性? [关闭]
【发布时间】:2017-04-30 04:28:16
【问题描述】:

我有一个域 abc.jp

例如:
我想检查这是否有效,我可以在此示例中添加另一个子级域。怎么做?如果可能,请上传一些java代码作为参考?

谢谢

【问题讨论】:

  • 这个答案有什么问题:stackoverflow.com/a/5933518/5749您的代码示例会很棒!
  • @Pullie 当我使用 InetAddress 并测试 abc.jp 时,它显示 ok。但是当我使用 ac.jp 时,它会显示 failed 。但是,ac.jp 存在(例如:link)代码:import java.net.InetAddress; import java.net.UnknownHostException; public class test { public static void main(String[] args) { String input = "ac.jp"; try { InetAddress iaddr = InetAddress.getByName(input); System.out.println("ok"); } catch (UnknownHostException uhe) { System.out.println("failed"); } } }
  • 啊好的。我明白你的意思了。我认为 Whois 会在这里为您服务,因为您无法进行 DNS 查询。

标签: java networking dns subdomain


【解决方案1】:

您的示例 ac.jp 是有效域,但不是 IP 可解析域。所以我会建议一个whois服务器。如果要检查所有域,则需要保留多个 whois 服务器。如果你只做日本,那么下面的 sn-p 应该可以工作™。

import org.apache.commons.net.whois.*;

public class Main {
    public static void main(String[] args) {
        WhoisClient whois = new WhoisClient();
        String whoishost = "whois.jprs.jp";
       // String whoishost = "whois.verisign-grs.com"; // for .com domains
        String domain = "ac.jp";
        try {
            whois.connect(whoishost);
            String whoisData = whois.query(domain);
            if (whoisData.toUpperCase().contains("NO MATCH")){
                System.out.println("Domain is not registered. According to whoishost: " + whoishost);
            }
            else{
                System.out.println("Domain is registered. According to whoishost: " + whoishost);
            }
        } catch (java.io.IOException ioex) {
            System.out.println("failed");
        }
    }
}

【讨论】:

  • 感谢您的积极回应。现在我需要测试另一个 ccTLD;那是 .mu 根据您上面的代码清单,您包含了以下内容:String whoishost = "whois.verisign-grs.com"; // for .com domains您知道 .mu 域的 whoishost 的字符串吗?如果没有,请告诉我在哪里可以找到它。
  • 他 @Tashley 是 Google 的基本技能。投入一些精力。 nirsoft.net/whois_servers_list.html
  • 非常感谢你,伙计。现在可以使用了。
【解决方案2】:

Guava 的InternetDomainName 很好地解决了这个问题。

String input = "abc.jp";
InternetDomainName domain = InternetDomainName.from(input);
InternetDomainName subdomain = domain.child("www");
subdomain.toString(); // "www.abc.jp";

如果输入域或子域无效,您将获得IllegalArgumentException

您也可以像domain.isUnderPublicSuffix() 一样进行检查,具体取决于您想要多少验证。

【讨论】:

  • 它不验证域。我用另一个 ccTLD 尝试过;那就是它生成的 .mu InternetDomainName{name=qqq.mu},即使这个域不存在。无论如何,感谢您尝试解决我的问题。
  • 好的,我误解了你的问题。我将“有效”解释为“格式正确且仅包含有效字符”。我没有意识到您还想检查它是否是互联网上的真实域。
猜你喜欢
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2011-01-14
  • 2013-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多