我已经had problems找到具有仅主机专用网络的本地VM,试图像这样获取它:
private static void printUvms(String domainName, String pattern)
{
InetAddress[] addresses = null;
try
{
addresses = InetAddress.getAllByName(domainName);
}
catch (UnknownHostException e)
{
System.out.println("Unknown Host: " + domainName);
return;
}
for (InetAddress address : addresses)
{
System.out.println("Host Name: " + address.getHostName());
System.out.println("Host Address: " + address.getHostAddress());
if (address.getHostAddress().startsWith(pattern))
{
System.out.println("UVM found!");
}
}
}
在这里,domainName将是VM的名称(“ UVM”),模式将是“ 192.168。”因为它是仅主机的网络。
由于某些原因,即使在我在Windows控制台中运行“ arp -a”时,该虚拟机具有正确的名称并以192.168。[i]。[j]地址列出,它有时也找不到此虚拟机,但有时确实如此。 否则,它会在连接到网络的某个位置找到具有相同名称的其他VM,如果存在,则只能找到本地VM。但是,从不两者兼而有之,考虑到我尝试“ getAllByName”,这会使我感到困惑。
所以我尝试了另一种看起来像这样的方法:
private static String getUvm(String domainName, String pattern)
{
String host = null;
for (int i = 0; i < 256; i++)
{
System.out.println(String.format("Checking %s%d...", pattern, i));
for (int j = 0; j < 256; j++)
{
host = String.format("%s%d.%d", pattern, i, j);
InetAddress address = null;
try
{
address = InetAddress.getByName(host);
if (address.getHostName().equals(domainName))
{
System.out.println("Host Name: " + address.getHostName());
System.out.println("Host Address: " + address.getHostAddress());
System.out.println("UVM found!");
return host;
}
}
catch (UnknownHostException e)
{
System.out.println("Unknown Host: " + domainName);
return null;
}
}
}
return null;
}
显然,这是一个非常耗时的方法,并不是我最后可以使用的方法。 如果有人可以告诉我如何以更好,更有效的方式做到这一点,我将不胜感激。 :)
答案 0 :(得分:0)
我只是看过Java文档,有一种方法:
静态InetAddress [] getAllByName(字符串主机)
解释:
给出主机名,根据系统上配置的名称服务返回其IP地址数组。
因此您可以执行以下操作,这是简单的代码:
List<> list = ..;
InetAddress[] inetAddress = InetAddress[] getAllByName(your domainName){}
for(InetAddress : inetAddress) {
list.add(inetAddress.getHostAddress().startWith("192.168"));
}