如何使用Java获取我运行的机器的域名?
例如,我的机器是一个域名可能为ec2-44-555-66-777.compute-1.amazonaws.com
我试过InetAddress.getLocalHost().getHostName()
,但这并没有给我上面的名字。这给了我一个类似于ip-0A11B222
答案 0 :(得分:11)
我猜您可以尝试使用InetAddress.getCanonicalHostName()
或InetAddress.getName()
方法。假设你的网上有一个正确的名称服务,这两个应该可以解决问题。
getCanonicalHostName()的JavaDocs说
获取完全限定的域名 这个IP地址。最大的努力 方法,意思是我们可能无法做到 返回FQDN取决于 底层系统配置。
答案 1 :(得分:5)
getCanonicalHostName 为您提供完全限定的域名。我尝试使用InetAddress.getLocalHost().getHostname()
,但它只获取您在命令行中看到的hostname
值,该值可能包含也可能不包含完全限定名称。
要检查是否使用命令行(在linux中)设置了完全限定的域名,请使用hostname --fqdn
。
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
答案 2 :(得分:-4)
您真的需要域名,还是IP地址足够?如果是后者,请尝试使用InetAddress.getLocalHost().getHostAddress()
答案 3 :(得分:-4)
我今天遇到了同样的问题,并找到了这个非常简单的解决方案:
System.getenv("userdomain");