在Java程序中是否可以访问Windows机器的ipconfig / all输出的“特定于连接的DNS后缀”字段中包含的字符串?
例如:
C:> ipconfig / all
以太网适配器本地连接:
Connection-specific DNS Suffix . : myexample.com <======== This string
Description . . . . . . . . . . . : Broadcom NetXtreme Gigabit Ethernet
Physical Address. . . . . . . . . : 00-30-1B-B2-77-FF
Dhcp Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
IP Address. . . . . . . . . . . . : 192.168.1.66
Subnet Mask . . . . . . . . . . . : 255.255.255.0
我知道getDisplayName()将返回Description(例如:上面的Broadcom NetXtreme Gigabit Ethernet),getInetAddresses()将为我提供绑定到此网络接口的IP地址列表。
但是有没有办法阅读“特定于连接的DNS后缀”?
答案 0 :(得分:3)
好的,所以我想出了如何在Windows XP和Windows 7上执行此操作:
答案 1 :(得分:0)
我使用了一种更复杂的方法,适用于所有平台。
在Windows 7,Ubuntu 12.04和一些未知的Linux发行版(Jenkins构建主机)和一台MacBook(未知的MacOS X版本)上进行了测试。
始终使用Oracle JDK6。从未与其他VM供应商一起测试过。
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名称,...