Получение имени домена с помощью Java
Как получить доменное имя машины, на которой я запускаю Java?
Например, моя машина является сервером, доменное имя которого может быть ec2-44-555-66-777.compute-1.amazonaws.com
Я пробовал InetAddress.getLocalHost().getHostName()
, но это не дает мне имя выше. Это дает мне имя хоста, которое похоже на ip-0A11B222
Ответы
Ответ 1
Я думаю, вы можете попробовать методы InetAddress.getCanonicalHostName()
или InetAddress.getName()
. Предполагая, что в вашей сети работает надлежащая служба имен, эти два должны сделать свое дело.
В JavaDocs для getCanonicalHostName() указано
Получает полное доменное имя для этого IP-адреса. Лучшее усилие метод, то есть мы не сможем вернуть полное доменное имя в зависимости от базовая конфигурация системы.
Поэтому, если вы хотите получить локальное полное доменное имя, вы можете позвонить: 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");