Java中的DNS查询

14

我正在Java中操作DNS服务。我特别想查找所有google.com地址并将它们显示在一个数组中,类似于使用nslookup进行查询:

nslookup -q=TXT _netblocks.google.com 8.8.8.8

我正在使用 InetAddress,但我一直收到异常。 由于这些异常引用了“未知主机”,我认为 InetAddress 无法读取TXT记录(如果我使用google.com,则可以工作,但这不会显示完整的IP范围)。

以下是我的代码:

InetAddress dnsresult[] = InetAddress.getAllByName("_netblocks.google.com");

for (int i=0; i<dnsresult.length; i++)
    System.out.println(dnsresult[i]);
我会很感激如果有人能为我指点方向。

这个问题可能不仅与Java有关,因为我的“ping”也无法解析“_netblocks.google.com”。 - Zhedar
谢谢你,Zhedar。我知道那个 :) 我加上那个是为了说明我想做什么。如果我使用“google.com”作为我的参数,它确实会弹出一个IP地址。但那是A记录。我需要获取TXT记录。 - zJK
4个回答

12

您无法在InetAddress类中查找TXT或其他DNS记录。InetAddress.getAllByName()仅查找AAAAA记录。

请查看DNS Java以满足您的需求。


5

这里有一个例子,可以实现你想要做的事情:

Attribute attr = new InitialDirContext().getAttributes("dns:_netblocks.google.com", new String[] {"TXT"}).get("TXT");
System.out.println("attr.get() = " + attr.get());
System.out.println("attr.getAll() = " + Collections.list(attr.getAll()));

如果您想使用自定义DNS服务器,请改用“dns://1.1/_netblocks.google.com”。


5

InetAddress 不支持此功能,但您可以通过 Java 中的 JNDI DNS 提供程序 实现 DNS TXT 记录查找。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接