"Ping" in JAVA
-
hi,
hat einer 'ne idee, wie man einen rechner mit java 'anpingen' kann?
java hat ja wohl keine icmp-klasse.
vielleicht das systemprogramm 'ping' ausführen?
wenn ja, ist das ergebnis (rückgabewert) das gleiche unter unix und windoofs?
-
net schrieb:
hat einer 'ne idee, wie man einen rechner mit java 'anpingen' kann?
Kann man nicht, da das normalerweise auf einer Ebene abläuft, auf die man mit Java nicht zugreifen kann. ...das ist zu "Low-Level".
-
Kann das ein Socket auch nicht? Oder dass man wenigstens die letzte Ping-Zeit abfragen kann?
-
hier steht was nettes dazu, und ein "pingsimple"..
http://www.torsten-horn.de/techdocs/java-net.htm
hier postet er weiter ein native code fürs richtige pingen
http://www.geocities.com/SiliconValley/Bit/5716/ping/index_eng.htmlkönnte man selber versuchen...
-
danke bisher für die tips...
elise schrieb:
da wird versucht eine verbindung zu port 80 (webserver) herzustellen. geht leider nur, wenn auch ein solcher läuft.
elise schrieb:
hier postet er weiter ein native code fürs richtige pingen
http://www.geocities.com/SiliconValley/Bit/5716/ping/index_eng.htmlechtes icmp. geht leider nur unter windoof. ich brauche das platformunabhängig.
ich glaube, das beste was man machen kann, ist das "ping" utility aufzurufen und dann in der ausgabe nach gewissen schlüsselwörtern suchen.
was meint ihr?
der rückgabewert (zumindest unter windoze) ist immer 0. egal ob sich die gegenstelle anpingen liess oder nicht.
-
ich bin gerade dabei was auszuprobieren:
import java.io.*; import java.util.regex.*; class Ping { String message = new String(); public Ping (String address) { try { Process p = Runtime.getRuntime().exec ("ping " + address); InputStream is = p.getInputStream(); while (true) { char c = (char)is.read(); if (c == 0xffff) break; message = message + c; } p.waitFor(); } catch (Exception ex) { System.out.println ("SHIT " + ex.toString()); } } public boolean isAlive() { Pattern p1 = Pattern.compile ("TTL"); Matcher m = p1.matcher (message); return m.find(); } } public class Pinger { public static void main(String[] args) { Ping p = new Ping("127.0.0.1"); System.out.println (p.isAlive()); } }
scheint zu funzen unter win.
aber...nach welchem teilstring muss ich unter unix suchen?
-
Wenn Du das plattformunabhängig lösen willst, dann schreib Dir doch eine RawSocket Lib in C oder C++. Das dürfte die wohl eleganteste Lösung sein.
<edit>
Linux 2.6.7:ping localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.040 ms
</edit
-
Wenn du das ganze plattformunabhängig haben willst, dann musst du Java (1.)5.0 verwenden - da gibt's das in der Klasse InetAddress(?)
-
Magoon schrieb:
Wenn Du das plattformunabhängig lösen willst, dann schreib Dir doch eine RawSocket Lib in C oder C++. Das dürfte die wohl eleganteste Lösung sein.
nee, absolut nicht. jedesmal compilen für jede platform. das ist viel zu unhandlich.
Magoon schrieb:
Linux 2.6.7:
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.040 msdanke! ich hab's jetzt auch für solaris. da sagt er nur "xxx.xxx.xxx.xxx is alive"
destruct0r schrieb:
Wenn du das ganze plattformunabhängig haben willst, dann musst du Java (1.)5.0 verwenden - da gibt's das in der Klasse InetAddress(?)
wow, haben sie's endlich eingebaut!
muss ich mir gleich mal ansehen...
-
net schrieb:
Magoon schrieb:
Wenn Du das plattformunabhängig lösen willst, dann schreib Dir doch eine RawSocket Lib in C oder C++. Das dürfte die wohl eleganteste Lösung sein.
nee, absolut nicht. jedesmal compilen für jede platform. das ist viel zu unhandlich.
Das Problem ist aber, dass dann Dein Tool Java 5.0 vorraussetzt. Im Moment ist 5.0 noch BETA, dann kommen erst die RC's bis dann endlich das erste Release erscheint. Auch dann werden die meisten Firmen ihre Produktivsysteme noch nicht auf 5.0 updaten.
-
Magoon schrieb:
Das Problem ist aber, dass dann Dein Tool Java 5.0 vorraussetzt. Im Moment ist 5.0 noch BETA, dann kommen erst die RC's bis dann endlich das erste Release erscheint. Auch dann werden die meisten Firmen ihre Produktivsysteme noch nicht auf 5.0 updaten.
ja, und deshalb bleibe ich erstmal bei der ausführung des externen 'ping' programms (siehe quellcode weiter oben). das scheint mir der beste kompromiss zu sein, da es ein 'ping' unter fast allen systemen gibt