Получение имени домена с помощью 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");