监听 DNS 变化

Listen for DNS changes

有没有办法使用 Java 来监听 DNS 变化?我希望在发生 DNS 更改时更新外部系统。

现有解决方案是监听 bind.log 变化。

这类似于这个问题:Resolving ip-address of a hostname

解析 Java 中的主机:

InetAddress address = InetAddress.getByName("www.example.com"); 

现在您可以 运行 在单独的 Thread 上执行此操作并监听更改:

public void launchThread()
{
    Thread thread = new Thread(new Runnable()
    {
        InetAddress start = InetAddress.getByName("www.example.com");
        while(start.equals(InetAddress.getByName("www.example.com")))
        {
            try
            {
                Thread.sleep(1000);
            }catch(Exception e){e.printStackTrace();}
        }

        System.out.println("Domain resolution has changed.");
    })
}

监视 DNS 服务器在 Internet 上的变化需要您获得 DNS zone transfer access (AXFR/IXFR) 的授权。获得区域传输访问权限后,您可以提取服务器保存的 DNS 数据的副本,但如果没有此类许可,您的选择将非常有限。例如,您可以轮询服务器以获取已知名称的 RR 更改,但您不可能仅使用 public DNS 访问来检测新名称。

另一种选择是使用被动 DNS 数据提供商,但这些提供商提供的覆盖范围可能有限,而且服务可能很昂贵。至少有一家主要的被动 DNS 数据提供商通过利用 DNS 流量来工作,因此他们可以在 DNS 流量中看到新名称和更改。