# LINUX: getHostAddress() und getHostName() werfen Exception



## rapthor (3. Feb 2005)

Hallo, 

ich habe eine Applikation mit ECLIPSE programmiert. Sie holt sich unter anderem den Netzwerknamen und die eigene IP Adresse des Rechners. Unter Windows kein Problem, aber LINUX wirft mir eine UnknownHostException .... 

IP-Adresse ermitteln: InetAddress.getLocalHost().getHostAddress() 
Hostnamen ermitteln: InetAddress.getLocalHost().getHostName() 

Liegt es daran, dass ich das JAVA-Programm nicht als root ausführe? Wenn ja, was kann ich ändern, dass es trotzdem funktioniert, als normaler Benutzer? 

Danke, 
Rapthor


----------



## foobar (3. Feb 2005)

Also bei mir wird keine Exception geworfen. 

Ist das Netzwerk richtig konfiguriert?
Was gibt ifconfig als root aus?
Wie sieht die /etc/hosts aus?


----------



## rapthor (3. Feb 2005)

Meine /etc/hosts:

*#
# hosts         This file describes a number of hostname-to-address
#               mappings for the TCP/IP subsystem.  It is mostly
#               used at boot time, when no name servers are running.
#               On small systems, this file can be used instead of a
#               "named" name server.
# Syntax:
#    
# IP-Address  Full-Qualified-Hostname  Short-Hostname
#

127.0.0.1	localhost

# special IPv6 addresses
::1             localhost ipv6-localhost ipv6-loopback

fe00::0         ipv6-localnet

ff00::0         ipv6-mcastprefix
ff02::1         ipv6-allnodes
ff02::2         ipv6-allrouters
ff02::3         ipv6-allhosts

127.0.0.2      	linux.local 	linux*

Und hier meine ifconfig-Ausgabe als root:


*eth0

Protokoll:Ethernet  Hardware Adresse 00:0C:29:95:89:66  
          inet Adresse:192.168.2.16  Bcast:192.168.2.255  Maske:255.255.255.0
          inet6 Adresse: fe80::20c:29ff:fe95:8966/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:126 errors:0 dropped:0 overruns:0 frame:0
          TX packets:113 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:100 
          RX bytes:24839 (24.2 Kb)  TX bytes:8871 (8.6 Kb)
          Interrupt:10 Basisadresse:0x10a4 

lo

Protokoll:Lokale Schleife  
          inet Adresse:127.0.0.1  Maske:255.0.0.0
          inet6 Adresse: ::1/128 Gültigkeitsbereich:Maschine
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:60 errors:0 dropped:0 overruns:0 frame:0
          TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:0 
          RX bytes:3912 (3.8 Kb)  TX bytes:3912 (3.8 Kb)*


----------



## meez (4. Feb 2005)

Wirft er bei beiden eine Exception?


----------



## foobar (4. Feb 2005)

Trag mal deinen Hostnamen in /etc/hostname und /etc/hosts ein:

/etc/hosts

```
192.168.2.16 myhostname
```

/etc/hostname

```
myhostname
```

Hast du einen Nameserver in /etc/resolv.conf angegeben?


----------



## rapthor (4. Feb 2005)

Er wirft bei beiden Methoden jeweils die Exception "UnknownHostException", da sie schon bei getLocalHost() auftritt.

Das Problem mit der IP-Adresse ist folgendes: Die bekomme ich per DHCP zugetielt, womit sie sich jedes Mal ändert. Und ich wollte mien JAVA Programm so gestalten, dass es möglichst auf jedem UNIX System auf gleichem Wege die IP des eigenen Rechners ermittelt.

Vielleicht sollte ich noch ansagen, dass mein LINUX als VMWare-Maschine mit "bridged ethernet" läuft, was aber im Prinzip trotzdem nichts daran ändert, dass es eine eigene (vom Host-System unabhängige) IP-Adresse zugeteilt bekommt und auch im Netzwerk als eigenständiger Rechner gefunden werden kann.

In meiner /etc/resolv.conf sind folgende Angaben nachzulesen:

nameserver 217.237.151.33
nameserver 217.237.149.225

Gibt es evtl. eine Methode in JAVA, mit der ich mittels Netzwerk-Interface Name an die IP komme? Der Name wäre bei mir ja "eth0" und ich denke, in fast allen üblichen Rechnern bräuchte ich genau die Adresse der "eth0".


Noch eine andere Frage: Kann man herausfinden auf welchem Betriebssystem die JAVA Applikation ausgeführt wird?


Danke für eure Bemühungen,
Rapthor


----------



## foobar (4. Feb 2005)

> Noch eine andere Frage: Kann man herausfinden auf welchem Betriebssystem die JAVA Applikation ausgeführt wird?




```
Properties p = System.getProperties();
        Iterator it = p.entrySet().iterator();
        
        while (it.hasNext())
        {
            Map.Entry  e = (Map.Entry) it.next();
            System.out.println(e.getKey() + " >> " + e.getValue());
        }
```
os.name
os.version
os.arch


----------

