# Netzwerkstatus rausbekommen



## CLSK (23. Okt 2009)

Hallo zusammen,

ich möchte zuverlässig feststellen, ob ein Computer mit einem lokalen Netwzerk- und/oder mit dem Internet verbunden ist.

Zwecks dessen habe ich Internetserver und lokale Computer angepingt und so folgenden Code verwendet 

```
InetAddress.getByName(IPString).isReachable(timeout);
```

Dabei entstanden folgende Probleme:
  - Wenn ein IPString wie mit der URL (z.B. "www.google.de") übergeben wird, scheisst das Programm Exceptions wenn der Domanename nicht aufgelösst werden kann. Das ist nicht schön.
  - Die direkte IP von google scheint mir nicht eindeutig. Eine Internetsuche nach "google IP" ergab viele verschidene IPs, die oft keine Gültigkeit mehr hatten. 

Ich weiss nicht genau was ich von der ProcessBuilder - Klasse halten soll.

```
ProcessBuilder pb = new ProcessBuilder("ping", ip);
```
Ist das noch Platformunabhängig? 


Kennt jemand eine eindeutige Methode den Netzwerkstatus abzufragen? Ist vll. die IP vom Internetanbieter oder dem Router immer eindeutig. Kann irgendwas im OS abgefragt werden? Ich würd auf das Herumpingen gerne verzichten. 

MfG und vielen Dank!!!
CLSK


----------



## Wildcard (23. Okt 2009)

ping kann auch nicht pingen wenn der Name nicht aufgelöst werden kann, das ist doch ganz klar. Google hat übrigens viele IPs.


----------



## DamienX (23. Okt 2009)

Hi,

wie mein Vorredner bereits sagte hat google etliche verschiedene IP adressen.... 

Du bist nicht der erste und wirst auch nicht der letzte sein der diese fragen stellt!
Java unterstützt meines Wissens nach kein ICMP evtl. weisst du das aber auch sonst 
hättest du wahrscheinlich nicht den ProcessBuilder Umweg genommen. 

Ich würde dir aber davon abraten weil ich einfach mal so sage dass der Ping befehl dann
auch auf jedem OS... jeder Shell etc. mit dem befehl "ping" aufrufbar sein muss.

Sicher kann man zwar auf Linux und Windows davon ausgehen aber mich persönlich würde
die Abhängigkeit stören.

P.S.: Der Tag an dem google.xy nicht erreichbar sein wird ist der Tag der Apokalypse ;P


----------



## tuxedo (24. Okt 2009)

Die Methode 
	
	
	
	





```
isReachable()
```
 würde ich nicht benutzen. Die checkt hauptsächlich ob Port 7 (echo port) offen ist (siehe JavaDoc)

Mach stattdessen doch lieber eine Socketverbindung zu google auf Port 80 auf. 
Die Zeit die Java zum öffnen der Socketverbindung braucht liegt ziemlich exakt an der "ping zeit". D.h. du kannst das einfache Öffnen einer Socketverbindung als Ping-Ersatz benutzen, musst allerdings wissen welcher Port an der Zielseite offen ist (was ja bei google nicht das Problem sein sollte).

- Alex


----------

