# Kann VM nicht ueber Host Name finden



## lapierre (19. Dez 2018)

Hi, ich habe folgendes Problem:

Es existieren 2 VMs.

Die Erste laeuft lokal und hat nur eine private host-only Verbindung (IP beginnt mit 192.168.)
Die Zweite laeuft auf einem anderen PC und ist mit dem Netzwerk verbunden (IP beginnt NICHT mit 192.168.)
Beide VMs haben den selben Namen (hier als Beispiel: "UVM").

Ich moechte die lokale VM finden, und versuche das ueber die Methode *InetAddress.getAllByName *zu loesen:

```
String domainName = "UVM";
String pattern = "192.168.";

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!");
            }
        }
   }
```
Wenn ich auf der Windows Konsole das "_*arp -a*_" command ausfuehre, werden die IP Adressen von beiden VMs gelistet, meine _*printUvms *_Methode gibt allerdings immer nur eine der beiden aus. Welche das ist scheint vom Zufall abzuhaengen, jedenfalls hat das zur Folge dass ich in vermutlich 50% der Faelle meine lokale VM nicht finden kann.
Was mich sehr verwirrt da ich angenommen habe _*getAllByName*_ sollte mir doch die Adressen ALLER VMs mit dem spezifizierten Namen zurueck geben.

Testweise habe ich versucht einfach jede IP Adresse in 192.168. nach dem Namen "UVM" zu durchsuchen, allerdings ist das sehr zeitaufwaendig.

```
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;
    }
```
Ich kenne mich nicht gut damit aus aber bei manchen Adressen, beispielsweise von 192.168.81.0 bis 182.168.81.255 braucht das Programm EWIG, waehrend es bei den meisten anderen halbwegs schnell laeuft (allerdings immer noch zu langsam um als geeignete Loesung in Frage zu kommen).

Hoffe mir kann hierbei jemand weiter helfen


----------

