2011-05-04 81 views
10

如何获取我在使用Java时正在运行的计算机的域名?
对于例如,我的机器是一台服务器,其域名可能是ec2-44-555-66-777.compute-1.amazonaws.com使用Java获取域名

我想InetAddress.getLocalHost().getHostName()但是这并没有给我起的名字上面。这给了我看起来类似的主机名ip-0A11B222

+0

你有什么需要_for_? – 2011-05-04 23:45:23

+1

也许这可能会帮助你一点(自己从来没有尝试过):http://blogs.captechconsulting.com/blog/david-tiller/accessing-the-dusty-corners-dns-java – Bart 2011-05-04 23:46:37

+0

我刚编辑我的问题。我想我真的在寻找域名。 – stumped 2011-05-04 23:51:26

回答

-3

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

+0

是的,我真的需要域名.. – stumped 2011-05-05 00:49:15

10

我想你可以试试InetAddress.getCanonicalHostName()InetAddress.getName()方法。假设有一个适当的名称服务在你的网络上运行,这两个应该做的伎俩。

的Javadoc getCanonicalHostName()

获取完全合格的域名 此IP地址。尽最大努力 方法,这意味着我们可能无法通过 返回FQDN,具体取决于 底层系统配置。

-4

今天我有同样的问题,发现了这个非常简单的解决方案:

System.getenv("userdomain"); 
+0

它只适用于Windows – 2015-05-01 21:50:49

4

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

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

getCanonicalHostName

公共字符串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