JAVA: сканирование определенной сети на предмет имени хоста - PullRequest
0 голосов
/ 18 декабря 2018

У меня возникли проблемы Нахождение локальной виртуальной машины с частной сетью только для хоста, попытка получить ее следующим образом:

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 будет именем виртуальной машины(«UVM») и шаблон будет «192.168».поскольку это сеть только для хоста.

По какой-то причине, хотя виртуальная машина имеет правильное имя и указана с адресом 192.168. [i]. [j], когда я запускаю "arp -a" вконсоль Windows, иногда она не находит эту виртуальную машину, но иногда это делает.Если этого не происходит, он вместо этого находит другую виртуальную машину с тем же именем, которая где-то подключена к сети, и, если это так, находит только локальную.Никогда не оба, однако, что я нахожу запутанным, учитывая, что я пытаюсь "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;
}

Очевидно, что это очень времяметод потребления, а не то, что я могу использовать в конце.Если бы кто-то мог сказать мне, как сделать это лучше и эффективнее, я был бы очень признателен.:)

1 Ответ

0 голосов
/ 18 декабря 2018

Я только что посмотрел на Java doc, есть метод:

static InetAddress [] getAllByName (String host)

И объяснение:

Учитывая имя хоста, возвращает массив его IP-адресов на основе настроенной службы имен в системе.

Итак, вы можете сделать это, вот простые коды:

List<> list = ..;
InetAddress[] inetAddress = InetAddress[] getAllByName(your domainName){}
for(InetAddress : inetAddress) {
    list.add(inetAddress.getHostAddress().startWith("192.168"));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...