Я использовал гораздо более сложный подход, который работает на всех платформах.
Протестировано в Windows 7, Ubuntu 12.04 и некоторых неизвестных дистрибутивах Linux (хосты сборки Jenkins) и на одном MacBook (неизвестная версия MacOS X).
Всегда с Oracle JDK6. Никогда не тестировался с другими поставщиками виртуальных машин.
String findDnsSuffix() {
// First I get the hosts name
// This one never contains the DNS suffix (Don't know if that is the case for all VM vendors)
String hostName = InetAddress.getLocalHost().getHostName().toLowerCase();
// Alsways convert host names to lower case. Host names are
// case insensitive and I want to simplify comparison.
// Then I iterate over all network adapters that might be of interest
Enumeration<NetworkInterface> ifs = NetworkInterface.getNetworkInterfaces();
if (ifs == null) return ""; // Might be null
for (NetworkInterface iF : Collections.list(ifs)) { // convert enumeration to list.
if (!iF.isUp()) continue;
for (InetAddress address : Collections.list(iF.getInetAddresses())) {
if (address.isMulticastAddress()) continue;
// This name typically contains the DNS suffix. Again, at least on Oracle JDK
String name = address.getHostName().toLowerCase();
if (name.startsWith(hostName)) {
String dnsSuffix = name.substring(hostName.length());
if (dnsSuffix.startsWith(".")) return dnsSuffix;
}
}
}
return "";
}
Примечание: я написал код в редакторе, а не скопировал фактически используемое решение. Он также не содержит обработки ошибок, например, компьютеры без имени, сбой при разрешении DNS-имени, ...