Alguém sabe como fazer teste de ping em Java

8 respostas
W

Boa Tarde!!!
solicito um auxilio pois preciso desenvolver um aplicativo que faça um teste de ping no hostname

Se alguem souber como por favor me responda

8 Respostas

T

Procure por isReachable

W

Voce tem algum trecho de codigo usando o isReachable ??

E

Tenta Assim:

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;

public class TestePing
{
  public static void main(String[] args)
  {
    if (args.length == 1) {
      InetAddress address = null;
      try {
        address = InetAddress.getByName(args[0]);
      } catch (UnknownHostException e) {
        System.out.println("Cannot lookup host "+args[0]);
        return;
      }
      try {
        if (address.isReachable(5000)) {
          long nanos = 0;
          long millis = 0;
          long iterations = 0;
          while (true) {
            iterations++;
            try {
              nanos = System.nanoTime();
              address.isReachable(500); // this invocation is the offender
              nanos = System.nanoTime()-nanos;
            } catch (IOException e) {
              System.out.println("Failed to reach host");
            }
            millis = Math.round(nanos/Math.pow(10,6));
            System.out.println("Resposta do IP: "+address.getHostAddress()+" com de tempo="+millis+" ms");
            try {
              Thread.sleep(Math.max(0, 1000-millis));
            } catch (InterruptedException e) {
              break;
            }
          }
          System.out.println("Iterations: "+iterations);
        } else {
          System.out.println("Host "+address.getHostName()+" is not reachable even once.");
        }
      } catch (IOException e) {
        System.out.println("Network error.");
      }
    } else {
      System.out.println("Usage: java isReachableTest <host>");
    }
  }
}

Não esqueça de passar o argumento, neste caso é o IP que você quer testar.

(Ex.: “java TestePing localhost” ou com arguments do tomcat)

Abraço.

W

Valew, consegui fazer
Tks

M
eduardoromcy:
Tenta Assim:
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.io.IOException;

public class TestePing
{
  public static void main(String[] args)
  {
    if (args.length == 1) {
      InetAddress address = null;
      try {
        address = InetAddress.getByName(args[0]);
      } catch (UnknownHostException e) {
        System.out.println("Cannot lookup host "+args[0]);
        return;
      }
      try {
        if (address.isReachable(5000)) {
          long nanos = 0;
          long millis = 0;
          long iterations = 0;
          while (true) {
            iterations++;
            try {
              nanos = System.nanoTime();
              address.isReachable(500); // this invocation is the offender
              nanos = System.nanoTime()-nanos;
            } catch (IOException e) {
              System.out.println("Failed to reach host");
            }
            millis = Math.round(nanos/Math.pow(10,6));
            System.out.println("Resposta do IP: "+address.getHostAddress()+" com de tempo="+millis+" ms");
            try {
              Thread.sleep(Math.max(0, 1000-millis));
            } catch (InterruptedException e) {
              break;
            }
          }
          System.out.println("Iterations: "+iterations);
        } else {
          System.out.println("Host "+address.getHostName()+" is not reachable even once.");
        }
      } catch (IOException e) {
        System.out.println("Network error.");
      }
    } else {
      System.out.println("Usage: java isReachableTest <host>");
    }
  }
}

Não esqueça de passar o argumento, neste caso é o IP que você quer testar.

(Ex.: "java TestePing localhost" ou com arguments do tomcat)

Abraço.

isso dai funciono pra vcs??? nos ultimso testes que eu fiz a algum tempo atras esse metodo estava bugado, hoje não foi diferente...

ao que me parece, esse código esta certo inclusive eu ja testei códigos testando esse mesmo metodo que ja peguei em outros lugares... mais assim como antes, esse método isReacheable só funciona pra mim quando eu passo localhost...

testei aqui com uma maquina da rede local aqui chamada fileserver:

H:\>java TestePing fileserver
Host fileserver is not reachable even once.

H:\>ping fileserver

Disparando contra fileserver [192.168.0.161] com 32 bytes de dados:

Resposta de 192.168.0.161: bytes=32 tempo<1ms TTL=128
Resposta de 192.168.0.161: bytes=32 tempo<1ms TTL=128
Resposta de 192.168.0.161: bytes=32 tempo<1ms TTL=128

Estatísticas do Ping para 192.168.0.161:
    Pacotes: Enviados = 3, Recebidos = 3, Perdidos = 0 (0% de perda),
Aproximar um número redondo de vezes em milissegundos:
    Mínimo = 0ms, Máximo = 0ms, Média = 0ms
Control-C
^C
H:\>java TestePing localhost
Resposta do IP: 127.0.0.1 com de tempo=502 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms
Resposta do IP: 127.0.0.1 com de tempo=502 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms
Resposta do IP: 127.0.0.1 com de tempo=501 ms

H:\>
E

Amigo, não sei o pq de não estar funcionando com vc, mas qto a pingar em outras maquinas, costumo mandar pingar no IP, no meu uso mesmo ele verifica o estado da máquina e qdo ela não responde envia automaticamente um e-mail me avisando, assim qdo estou no MSN e algum servidor falhe já vejo um e-mail sobre o erro e entro em ação antes de possíveis reclamações.

Tenta ver se seu “java.exe” tem liberação no firewall.

Boa sorte. Um abração aos amigos.

M

eduardoromcy:
Amigo, não sei o pq de não estar funcionando com vc, mas qto a pingar em outras maquinas, costumo mandar pingar no IP, no meu uso mesmo ele verifica o estado da máquina e qdo ela não responde envia automaticamente um e-mail me avisando, assim qdo estou no MSN e algum servidor falhe já vejo um e-mail sobre o erro e entro em ação antes de possíveis reclamações.

Tenta ver se seu “java.exe” tem liberação no firewall.

Boa sorte. Um abração aos amigos.

eu verifiquei e tem sim… na duvida eu até desativei o firewall e testei o código acima da mesma forma que tinha relatado antes… como usuario administrador

eu não falo ingles mais anteriormente googlando os primeiros resultados que tive encontrei bugs reportados sobre esse método… se vc ta me falando que ai funciona, deve ter alguma coisa de que faça não funcionar no meu sistema…sei la, mais de toda forma obrigado ai pelo interesse…

M

Pessoal, também encontrei o mesmo problema… Se alguém souber a solução, posta aí pra gente… Meu caso foi idêntico ao relatado pelo “Maior abandonado”…

Tenho um servidor e tento pingar pelo isReachable, ele retorna false, mas se pigo pelo “ping” no Prompt de Comando do Windows, ele encontra o servidor.

Percebi também que isso ocorre (pelo menos no meu caso), quando eu pingo em um host que está fora da minha rede. Por exemplo: Estou na rede 192.168.101.0 e tento pingar um Host com o endereço 10.0.0.106. Para isso, meu Gateway configurado como padrão no Windows é o 192.168.101.2 . O curioso é que está certo, pois o Windows consegue enchergar a máquina 10.0.0.106, mas o método isReachable retorna false. Contudo fiz o teste em outras redes, e percebi que quando uso o método isReachable para acessar um host dentro da mesma rede que estou, ele retorna true, ou seja, consegue encontrar o host. Mas quando é para ele pingar um host externo, ou seja, em outra rede, mesmo que seja na internet, por exemplo, não pinga!.. Será que tem que configurar um Gateway padrão na JVM ??? Ou será que ela assume o Gateway do próprio Sistema Operacional?

Abraços.

Criado 18 de março de 2009
Ultima resposta 17 de set. de 2009
Respostas 8
Participantes 5