Aplicação dos tipo JAVA PING[RESOLVIDO]

9 respostas
magemelli

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
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();

    }

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

Abraço

9 Respostas

Alexandre_Saudate

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

magemelli
Deixe me entender, aquelas linhas fazem o trabalho do ping?
//                                                                                         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.

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

Alexandre_Saudate
magemelli:
Deixe me entender, aquelas linhas fazem o trabalho do ping?
//                                                                                         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.

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

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

kaique

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.

maior_abandonado

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…

magemelli

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…

V

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
[email removido]

V

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

H

Opa!

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

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();
	}
}

Valeu

Criado 24 de fevereiro de 2010
Ultima resposta 27 de dez. de 2011
Respostas 9
Participantes 7