【发布时间】:2019-05-18 17:06:53
【问题描述】:
我已经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”),pattern 是“192.168”。因为它是一个仅限主机的网络。
由于某种原因,当我在 Windows 控制台中运行“arp -a”时,即使 VM 具有正确的名称并列出了 192.168.[i].[j] 地址,它有时也找不到此 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;
}
显然,这是一种非常耗时的方法,我最终无法使用。 如果有人能告诉我如何以更好、更有效的方式做到这一点,我将不胜感激。 :)
【问题讨论】:
标签: java networking virtual-machine ip-address