Newsgroup: it.comp.java
Titolo: ping...

è possibile fare un ping da java e trarne tutte le possibili info? (numero 
byte, durata,etcetc) ?
grazie
-- 
by \ \/ /\/
PerezDeQueya80 on AzzurraNET.org

grazie
no. puoi usare solo udp e tcp.
ciao
-- 
Seti@Home Java Applets
http://maruko.cjb.net/

 
se intendi "usando java come linguaggio per la programmazione di rete usando 
il protocollo ICMP", allora la risposta credo che sia si.
-- 
--La vita è una tempesta,
prenderlo in quel posto un lampo--


E secondo te il ping dove lavora...
Non c'è niente nel JDK o nel JEE che faccia al caso tuo.
Forse (sicuramente) su Internet esistono classi già scritte che aprono
DatagramSocket sulla porta 7 del Ping.
Comunque ti riporto una vecchia classe che scrissi tempo fa dove controllo
solo l'esistenza, lanciando un exec, di una determinata macchina in base
all'indirizzo IP
package common.test;
import java.io.* ;
public class TestPing
{
   synchronized public static int executeWindows(String host)
   {
      int esito = 0 ;
      Runtime r = Runtime.getRuntime();
      String instruction = "ping " + host;
      Process p ;
      try {
         p = r.exec(instruction);
         InputStream is = p.getInputStream();
         int b ;
         String output = "" ;
         while ( (b = is.read()) != -1)
            output += (char)b ;
         if ((output.indexOf("Reply") != -1) || (output.indexOf("Risposta")
!= -1)){
            // la risposta contiene almeno un reply, quindi l'host ha
replicato.
            esito = 1 ;
         }
      }
      catch (IOException ioe){
         System.out.println("Eccezione nel Ping:" + ioe);
      }
      return esito ;
   }
   synchronized public static int executeLinux(String host)
   {
     int esito = 0 ;
       Runtime r = Runtime.getRuntime();
       String instruction = "ping -c 3 " + host;
       Process p ;
       try {
          p = r.exec(instruction);
          InputStream is = p.getInputStream();
          int b ;
          String output = "" ;
         while ( (b = is.read()) != -1)
            output += (char)b ;
         if (output.indexOf("time=") != -1){
            // la risposta contiene almeno un reply, quindi l'host ha
replicato.
            esito = 1 ;
         }
      }
      catch (IOException ioe){
         System.out.println("Eccezione nel Ping:" + ioe);
      }
      return esito ;
   }
   synchronized public static int execute(String indirizzoIp)
   {
     if (System.getProperty("
os.name
").equals("Linux"))
      return executeLinux(indirizzoIp);
     return executeWindows(indirizzoIp);
   }
   public static void main (String args[]) throws Exception
   {
      if (args.length != 1) {
         System.out.println("#parametri non valido.");
         System.exit(0);
      }
      int esito = TestPing.execute(args[0]);
      if (esito == 1){
         System.out.println("Esito Positivo del ping.");
      }
      else
         System.out.println("Esito Negativo del ping.");
   }
}

E secondo te il ping dove lavora...
il comune comando "ping" usa il protocollo ICMP. 
ICMP non e' supportato in Java. Forse si trova qualche libreria che si
basa su JNI ma questa e' un'altra storia.
quello che tu chiami ping e' il servizio "echo" (porta UDP o TCP 7).


 E secondo te il ping dove lavora...
[CUT]
Non lavora con udp e/o tcp :-) ...
Il protocollo utilizzato dal ping (ICMP) è ad un livello addirittura
inferiore a udp e tcp.Nel modello iso/osi l'icmp fa parte del "network layer
(livello 3)" mentre tcp e udp (fanno parte del trasport layer (livello 4))
Ciao
Daniele

 quello che tu chiami ping e' il servizio "echo" (porta UDP o TCP 7).
Quello che intendevo era questo:
Il protocollo ICMP lavora su IP, allo stesso livello di TCP e UDP, quindi è
normale che in Pure Java non si possa fare niente e ti devi appoggiare a
qualche libreria usando JNI.
Nulla vieta però di implementare, o di trovare già fatto, qualche classe che
faccia da client sul server "echo", poi che sia un Socket o un
DatagramSocket questo è indifferente.
Davo per scontato che si trattasse del servizio "echo", o come lo chiamo
volgarmente io PING.
Ciao ciao.
Daniele.

 volgarmente io PING.
che rimangono cmq due cose distinte a prescindere da come le chiami, "echo"
è un servizio (un server che rimanda al mittente tutto cio' che riceve
implementato sia udp e tcp), "ping" è un pacchetto ICMP di tipo "echo
request", il cosidetto "pong" (il ritorno) è di tipo "echo replay".
--
Ciao,
 Renato
--------------------------------------------------------
Renato Eschini
  Synapsis S.r.l.
     in Computer Science
  P.zza Dante, 19/20
  57121 Livorno Italy
  tel: 
+39 0586 426790
  fax: 
+39 0586 443954
  web: 
www.websynapsis.com
--------------------------------------------------------

 al Transport nello stack "TCP/IP"
OK, forse il thread sta diventando OT ma, o non ho capito bene, o stiamo
dicendo tutti la stessa cosa in modi differenti.
Lo stack dei protocolli di ICMP e ECHO dovrebbero essere questo se la
memoria non mi inganna:
ether2
ip-v4
icmp
e
ether2
ip-v4
tcp/ip o udp
echo
Ho detto prima che non sono stato preciso nel rispondere perchè davo per
scontato che PerezDeQueya80 intendesse chiedere se esisteva qualche libreria
o classe che gestisse il protocollo echo (da me frettolosamente rinominato
ping).
Comunque ho sbagliato nella risposta precedente a dire che icmp sta allo
stesso strato di tcp/ip e udp?

 stesso strato di tcp/ip e udp?
[CUT]
Sì hai sbagliato  ...
Tcp e Udp sono del livello transport 4  ... ICMP lavora allo stesso livello
del protocollo IP (il livello 3)
Ciao Daniele

Chiedo Venia, ho trovato questa spiegazione alla pagina
http://www.dia.uniroma3.it/~patrigna/didactic/imp_elab/slides_icmp/icmp_1.ht
ml
ICMP, come TCP e UDP, utilizza i servizi del livello IP, tuttavia viene
ritenuto generalmente parte integrante del protocollo IP (ICMP è incluso
nelle specifiche del protocollo IP)
Svelato l'arcano (almeno per me), ora so qualcosa in più...