【问题标题】:Obtaining domain name using Java使用Java获取域名
【发布时间】:2011-05-04 23:38:03
【问题描述】:

如何使用 Java 获取我正在运行的机器的域名?
例如,我的机器是一个域名可以是ec2-44-555-66-777.compute-1.amazonaws.com的服务器

我试过InetAddress.getLocalHost().getHostName(),但这并没有给我上面的名字。这给了我看起来类似于 ip-0A11B222

的主机名

【问题讨论】:

标签: java


【解决方案1】:

我猜你可以试试InetAddress.getCanonicalHostName()InetAddress.getName() 方法。假设在您的网络上运行了适当的名称服务,这两个应该可以解决问题。

getCanonicalHostName() 的 JavaDocs 说

获取全限定域名 对于这个 IP 地址。最大努力 方法,这意味着我们可能无法 返回 FQDN,具体取决于 底层系统配置。

因此,如果您想获取本地 FQDN,通常可以致电:InetAddress.getLocalHost().getCanonicalHostName()

【讨论】:

    【解决方案2】:

    getCanonicalHostName 为您提供完全限定的域名。我尝试过使用InetAddress.getLocalHost().getHostname(),但它只会获取您在命令行中看到的hostname 值,该值可能包含也可能不包含完全限定名称。

    要检查是否使用命令行(在 linux 中)设置了完全限定域名,请使用 hostname --fqdn

    getCanonicalHostName

    public String getCanonicalHostName() 获取全限定域 此 IP 地址的名称。尽力而为的方法,这意味着我们可能不是 能够根据底层系统返回 FQDN 配置。

    /** Main.java */
    import java.net.InetAddress;  
    
    public class Main {
    
      public static void main(String[] argv) throws Exception {
    
        byte[] ipAddress = new byte[] {(byte)127, (byte)0, (byte)0, (byte)1 };
        InetAddress address = InetAddress.getByAddress(ipAddress);
        String hostnameCanonical = address.getCanonicalHostName();
        System.out.println(hostnameCanonical);
      }
    }
    

    示例取自: http://www.java2s.com/Tutorials/Java/java.net/InetAddress/Java_InetAddress_getCanonicalHostName_.htm

    【讨论】:

      【解决方案3】:

      您真的需要域名,还是 IP 地址就足够了?如果是后者,请尝试使用InetAddress.getLocalHost().getHostAddress()

      【讨论】:

        【解决方案4】:

        我今天遇到了同样的问题,找到了这个非常简单的解决方案:

          System.getenv("userdomain");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-19
          • 2015-11-06
          • 2018-12-28
          • 1970-01-01
          • 1970-01-01
          • 2023-03-07
          • 2012-01-05
          • 2011-04-17
          相关资源
          最近更新 更多