Aplicação dos tipo JAVA PING[RESOLVIDO]

Daê galera, Tô com um problema que tá me incomodando…
preciso fazer uma aplicação que monitore vários pings de servidores e mandar um email caso dê problema
o problema é que estou tendo problemas em retornar os resultados, tipo estatística do ping… tempo…etc…

eis o meu programa

[code] public static void main(String[] args) throws IOException {
Process proc = Runtime.getRuntime().exec(new String[]{“ping”,“10.14.0.1”});

    //pega o retorno do comando para ler o resultado


    InputStream in = proc.getInputStream();

    byte[] buffer = new byte[1024];
    int len;
    String s="";
    while((len = in.read(buffer)) >= 0) {
            s+=""+len+"\n";
           System.out.println(s);
           }

   in.close();

}[/code]

Sei que tem algum conteúdo sobre isso mas não consegui adequar à minha necessidade…
Obrigado pela ajuda desde já!!!

Abraço

Caso você não precise, explicitamente, do retorno, use:

InetAddress address = Inet4Address.getByAddress(new byte[] {(byte)200,(byte)200,(byte)200,(byte)200}); //Recupera o endereço boolean pingBemSucedido = address.isReachable(1000); //O parâmetro é o timeout.

Caso você precise mesmo do código que você postou, não esqueça de colocar um Thread.sleep, algo assim, para esperar o processo responder, OK ?

[]´s

Deixe me entender, aquelas linhas fazem o trabalho do ping?

[code]// Aqui seria o ip que eu quero lançar?
InetAddress address = Inet4Address.getByAddress(new byte[] {(byte)200,(byte)200,(byte)200,(byte)200}); //Recupera o endereço

boolean pingBemSucedido = address.isReachable(1000); //O parâmetro é o timeout.[/code]

assim eu nao necessito usar aqueles comandos que eu estava fazendo?
obrigado pela Ajuda

[quote=magemelli]Deixe me entender, aquelas linhas fazem o trabalho do ping?

[code]// Aqui seria o ip que eu quero lançar? Isso!
InetAddress address = Inet4Address.getByAddress(new byte[] {(byte)200,(byte)200,(byte)200,(byte)200}); //Recupera o endereço

boolean pingBemSucedido = address.isReachable(1000); //O parâmetro é o timeout.[/code]

assim eu nao necessito usar aqueles comandos que eu estava fazendo?
obrigado pela Ajuda[/quote]

Mais ou menos… ele faz o ping e te retorna se o ping foi bem sucedido. Mas não retorna as estatísticas, por exemplo.

[]´s

Se as estatísticas do S.O. são suficientes para você, essa pode ser uma solução:

public class Ping {

	public static void main(String[] args) {

		try {
			Process process = Runtime.getRuntime().exec("ping -t 4 <ENDEREÇO_IP>");
			process.waitFor();

			InputStream stream = process.getInputStream();
			byte[] content = new byte[stream.available()];
			stream.read(content);

			System.out.println(new String(content));
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

}

O problema aqui é que a string do comando provavelmente vai ser diferente, dependendo da sua plataforma.

[]'s.

o metodo isReachable aparentemente ta bgado… no passado pesquisando acho que encontrei bug relatado referente a ele, quando testei só funcionava com localhost, enquanto que com outros endereços eu só conseguia piingar pelo dos…

uma alternativa seria pegar via runtime o retorno e analisar a string do retorno para obter as estatisticas… para o seu software continuar multiplataforma, você poderia pegar o system.getProperty, acho que os.name o nome da propriedade, ai se for windows poe o comando de um jeito, se não você faz de outro, etc… na hora de obter a string…etc…

GALERA, VALEU MESMO, Todas as Dicas só acrescentaram no meu conhecimento e no meu software,
vou testar dessas maneiras e ver qual se adequa melhor a minha necessidade…

VALEW, no momento que terminar o programa, vou disponibilizar aqui… ou por msn…

Boa noite
Amigo a meses venho procurando uma aplicação tipo esta que voce menciona no portal
sera que teria a possibilidade de voce disponibilizar a mesma.
desde ja lhe agradeço a atenção
meu e-mail e
almeidamentz@gmail.com

Vc poderia enviar esta aplicação pro meu email?

Opa!

Meio na gambiarra, tratando a string recebida na munheca mesmo, mas parece que funciona… Para quem quiser…

[code]import java.io.*;

public class Teste {

public static void main(String[] args) throws IOException {
	Process proc = Runtime.getRuntime().exec(new String[]{"ping","www.facebook.com"});

	//pega o retorno do comando para ler o resultado

	InputStream in = proc.getInputStream();

	byte buffer[] = new byte[1024];

	while(in.read(buffer) >= 0) {
		String buff = new String(buffer);

		if(buff.contains("TTL")) {
			String bytes = buff.substring(buff.indexOf("bytes=") + 6, buff.indexOf("tempo=") - 1);
			String tempo = buff.substring(buff.indexOf("tempo=") + 6, buff.indexOf("TTL=")   - 1);
			String ttl   = buff.substring(buff.indexOf("TTL=") + 4);
			ttl          = ttl.substring(0, buff.indexOf(" ") - 1);

			System.out.println(">> Bytes = " + bytes + " | Tempo = " + tempo + " | TTL = " + ttl);
		}

		buffer = new byte[1024];
	}

	in.close();
}

}[/code]

Valeu