【问题标题】:Resolving ip-address of a hostname解析主机名的 IP 地址
【发布时间】:2013-03-25 04:25:18
【问题描述】:

我有 DNS 服务器 IP 地址和主机名。

使用 Java,如何使用 IP 地址和主机名找到该 DNS 服务器返回的主机名 IP 地址?

【问题讨论】:

  • dig <hostname> 在命令行中?
  • 如何在 java 代码中做同样的事情,我应该在哪里使用 DNS-Server ip 地址和主机名。
  • 在任何情况下我们都需要提供 DNS 服务器 ip 地址还是默认尝试查找它。在这里我有点困惑我们是否只需要使用主机名或主机名+dns-server ip地址也是?
  • 使用名称查找地址并不复杂。只要你使用系统默认的解析器即可。那么:你真的需要使用 DNS 服务器地址吗?
  • 我也有同样的问题:我真的需要 DNS 服务器地址还是默认解析地址。顺便说一句,我使用的是 AIX Unix 服务器。

标签: java


【解决方案1】:

看看InetAddressgetHostAddress() 方法。

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 

【讨论】:

  • 如果我有一个 dns ip 地址 10.37.221.152 和一个主机名说“www.student.com”,那么我怎样才能找到这个 ip 地址。
  • @DarkMatter:InetAddress 应该在您请求 getHostAddress() 时获得 DNS 解析地址。我不确定您是否可以强制它使用 特定的 DNS 服务器。
  • 所以它必须在没有程序员明确指定DNS服务器地址的情况下自行解决,对吗?
  • @DarkMatter 是的。我相信它使用计算机本身设置的任何 DNS 服务器。
【解决方案2】:

你可以这样做:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com"))
    System.out.println(addr.getHostAddress());

【讨论】:

    【解决方案3】:

    您可以为此使用 InetAddress。试试下面的代码,

    InetAddress address = InetAddress.getByName("www.yahoo.com");
    System.out.println(address.getHostAddress());
    System.out.println(address.getHostName());
    

    【讨论】:

      【解决方案4】:

      如上所述,您可以使用 InetAddress.getByName("hostName") 但这可以为您提供缓存的 IP,请阅读 java 文档以获取相同的信息。 如果您想从 DNS 获取 IP,可以使用:

      InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName");
      

      【讨论】:

      • 除了@daksh 指出的内容之外,您还可以按照here 的建议禁用DNS 响应缓存,但请注意禁用缓存的时间以及您的操作系统对DNS 响应的缓存以及建议的其他 DNS 服务器here。希望这会有所帮助
      • 出于某种原因,这个电话给了我任何主机名的肯定结果。我以为我默认使用我的 IP,但不,它为我提供了任何未知主机的特定 IP。
      猜你喜欢
      • 2011-03-12
      • 2014-10-13
      • 2013-01-29
      • 2011-05-07
      • 2019-09-29
      • 1970-01-01
      • 2014-02-26
      • 2012-08-04
      • 2011-01-10
      相关资源
      最近更新 更多