监听 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 流量中看到新名称和更改。
有没有办法使用 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 流量中看到新名称和更改。