Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
in meinem Netzwerk, wo sich manche Clients ab und zu abschalten, möchte ich überprüfen, wer alles da ist. Allerdings darf das nicht mit isReachable passieren.
Hat jemand ne andere Idee? Habs auch schon versucht, ne UDP-Anfrage an die Broadcast-Adresse zu schicken, aber das hat auch nciht geklappt.
Kannst Du Deinen Anwendungsfall noch etwas genauer beschreiben? Sind die Clients im Voraus bekannt? Warum darf es nicht isReachable sein? Sind die Clients im selben IP-Subnetz wie der Rechner, auf dem Deine Anwenung läuft (wg. Broadcasts)?
wenn man sowas nicht darf, darf man den Clients dann auch nicht normale Nachrichten schicken für was immer der Programmzweck ist?
ist eine solche Nachricht nicht quasi auch ein Ping?
Also, diese Maschinen, deren Verfügbarkeit geprüft werden soll, können zwar JAVA, aber eben nicht alles, da nicht alles implementiert ist. Bei isReachable oder receive bekomme ich die Fehlermeldung "nicht implementiert".
Ich sag mal, je einfacher (von der Version her), desto besser.
nochmal: was sind Clients im Client-artigen Sinne, besteht irgendeine Art von Kommunikation?
wenn ja dann kann doch diese Kommunikation auch zum kurzen Check genutzt werden
oder ist sie eingeschränkt nur auf wichtige Daten/ lange Bearbeitung?
Die Maschinen hängen alle an einem Switch, sind also über Ethernet verbunden und haben demnach eine IP-Adresse.
Jetzt soll eine Maschine rausfinden können, wer alles am Netz ist.
Die Maschinen hängen alle an einem Switch, sind also über Ethernet verbunden und haben demnach eine IP-Adresse.
Jetzt soll eine Maschine rausfinden können, wer alles am Netz ist.
Sind die IPs auch alle im selben IP-Subnetz? Sonst funktionierts mit Brodcasts nicht. Und sind die IPs der zu prüfenden Geräte vorher bekannt? (Hab ich zwar schon gefragt, aber...)
Gästin hat gesagt.:
Also, diese Maschinen, deren Verfügbarkeit geprüft werden soll, können zwar JAVA, aber eben nicht alles, da nicht alles implementiert ist. Bei isReachable oder receive bekomme ich die Fehlermeldung "nicht implementiert".
Es muss doch nur die Maschine, die die Verfügbarkeit prüfen soll, isReachable implementiert haben. Die anderen Maschinen müssen nur auf Pings antworten. Und ein Gerät, das einen IP-Stack hat, aber nicht auf Pings antworten kann, hab ich noch nie gesehen. Es sei denn natürlich, jemand hat das auf einer (Host-)Firewall mit Absicht so konfiguriert.
zwei Dinge - setze Dich bitte mit den grundlegenden Funktionen des Netzwerkes auseinander (eine Antwort auf einen Ping muss nicht initiert werden). Außerdem hatten wir das Thema vor ein paar Wochen schonmal. Suche bitte danach - dort ist auch eine Antwort zu finden.
Eines können sicher alle... [c]InetAddress.getByName("192.168.x.x") throws UnknownHostException[/c] Diese Exception kann man abfangen und dann weis man, ob der Host "reachable" ist.
[EDIT]Wenn man einen Timeout benötigt, kann man mit 'nem Task-Scheduler oder einem anderen Thread auch diese Zeit warten und eine entsprechende Exception werfen. Nur für den Fall, dass das Warten auf die Host-Antwort zu lange dauert. Aber in Private-Networks dürfte das unnötig sein.[/EDIT]
Eines können sicher alle... InetAddress.getByName("192.168.x.x") throws UnknownHostException Diese Exception kann man abfangen und dann weis man, ob der Host "reachable" ist.
Was soll das bringen? Mit der Methode erzeugt man sich eine Instanz von InetAddress entweder per Hostname, der dann auf eine IP aufgelöst wird oder per IP. Ob der Host tatsächlich an ist, findet man damit nicht raus.
Gästin hat gesagt.:
Niemand kann isReachable. Die können zwar theoretisch antworten, aber es kann niemand nen ping starten.
Was sind den das für komische JVMs, mit denen Du da arbeitest!?! Hast Du denn Zugriff auf die Konsole und könntest von dort einen ping absetzen? Falls ja, könntest Du das von Java aus antriggern (Runtime.exec).
Broadcasts funktionieren nur im selben IP-Subnetz. Ein Subnetz entsteht durch IP-Adresse und Subnetzmaske. Dazu ein paar Beispiele:
Code:
# Adressen im selben Subnetz
192.168.1.1/255.255.255.0
192.168.1.2/255.255.255.0
# Broadcastadresse für beide 192.168.1.255, geht also
# Adresse fängt zwar mit 192.168 an, is aber in einem
# anderen Subnetz.
192.168.100.2/255.255.255.0
# Broadcastadresse 192.168.100.255, anders als oben,
# funktioniert also nicht.
Äh... mit IP-Addresse als Name muss da aber nichts aufgelöst werden und der Host wird damit nicht über DNS aufgelöst sondern direkt angesprochen. Aber wenn das nicht funktioniert, evtl. reagieren die Rechner ja auf Echo (Port 7). Einfach mal ein paar Pakete hinschicken und auf Rückmeldung warten. Anders macht's Ping afaik auch nicht.
Der host wird bei der diskutierten Programmzeile überhaupt nicht angesprochen. Es wird lediglich eine Instanz von InetAddress erzeugt. Solange der angegebene Hostname aufgelöst werden kann, oder es ein IP-String ist, klappt das egal, ob der Host erreichbar ist oder nicht. Zum Test der Erreichbarkeit taugt diese Methode also nicht.
Spacerat hat gesagt.:
Aber wenn das nicht funktioniert, evtl. reagieren die Rechner ja auf Echo (Port 7). Einfach mal ein paar Pakete hinschicken und auf Rückmeldung warten. Anders macht's Ping afaik auch nicht.
Ja, beide schicken Pakete und warten auf ne Antwort. Aber das eine hat ansonsten mit dem anderen technisch nichts zu tun. Ping arbeitet mit dem ICMP. Das geht bei so ziemlich allen Geräten, die einen IP-Stack haben. Echo ist ein Serverdienst, der über TCP oder UDP erreichbar ist. Dazu muss dieser Dienst laufen und das tut er bei fast keinem System.
Aber die Idee ist trotzedem garnicht so schlecht. Denn Systeme reagieren irgendwie immer, wenn sie angesprochen werden. Auch auf Ports, wo nichts lauscht. Bei Versuch, einen geschlossenen UDP-Port anzusprechen erhält man i.d.R ein ICMP-Port unreachable als Antwort, bei TCP ein TCP-Reset. Wenn solche Antworten kommen, kann man also zumindest daraus schließen, dass der entspr. Host an ist.