Ping em java!

editando… não tenho mais esse software fazem anos… alias pelo que dei uma olhadinha bem rápida não recomendo fazer do jeito que estava…

não vou responder mensagens pessoais pedindo este código e tão pouco mensagens aqui.

se estiverem precisando de ajuda recomendo abrirem um novo tópico.

se vc quer toda a resposta do ping é só muda a linha 24 para

resposta+=s.nextLine()+"\n"; //assim essa String tem a resposta igual no dos

as linhas de 25 a 38 é porcessamento meu pra ver se o host caiu e manda uma resposta mais simples (host down), ou seja…pra sua aplicação vc pode tira elas, dexa só a 34 q é o fechamento do loop.

Amigo lhe agradeço muito pela ajuda se vc puder me mandar o arquivo que vc mencionou o meu email é esse sbguimaraes@gmail.com tenho que implementar algumas coisinhas a mais, mais nada de mais so essa classe que vc me mandou ja resolve 70% do meu problema.

Obrigado pela ajuda !!!

Bom dia maior_abandonado !!

Cara vc podia me explicar o que essa parte do codigo faz:

fim = resposta.length()-8;

o que eu não consegui entender foi por que que vc esta subtraindo o tamanho da String por 8, e a outra parte que eu não consegui enteder foi essa:

for(int j= 0; j <= fim; j++){
if(resposta.substring(j, 8+j).equals(“Resposta”)){
kbo=true;
break;
}

eu sei que a substring vai retornar a parte da string delimitada pelo parametros passados, mais por que razão o parâmetro final(8) esta sempre sendo somado a j a cada repetição do loop se a String a qual esta sendo comparada vai estar sempre no começo da String.

[color=violet]maior_abandonado

Tu sabe como funcionaria pra mim alterar esse comando pra funcionar no linux?
preciso de algo semelhante a isso para desenvolver meu TCC, so que irei utilizar outros comandos ao invés do ping.
Acretido que o esquema de comando seja o mesmo.

Obrigado.[/color]

sbguimaraes, esse bloco de codigo ai é quem verifica se o server caiu ou não… exatamente como vc falo, essa parte ai retorna a substring delimitada, ou de um jeito mais informal de responder, ele procura pela palavra “RESPOSTA” no meio da saida do ping…

veja a resposta de um ping,

Disparando contra 192.168.0.1 com 32 bytes de dados:

Resposta de 192.168.0.1: bytes=32 tempo<1ms TTL=64 //<<----- procura por resposta pra pega essa linha aki

Estatísticas do Ping para 192.168.0.1:
Pacotes: Enviados = 1, Recebidos = 1, Perdidos = 0 (0% de perda),
Aproximar um número redondo de vezes em milissegundos:
Mínimo = 0ms, Máximo = 0ms, Média = 0ms

fim = resposta.length()-8;

quanto a essa linha, ela serve pra sabe até onde vai loopa embaixo, pra ir até o 8 digitos antes do final da string da saida do ping, pq se nao axo do -7 em diante, nao vai mais acha a string que ta procurando (“RESPOSTA”) (só pra fica um pokinhu mais rapido, ja q essa operação é mto feita no programa).

faz um tempinhu ja q eu nao mexo nele nao lmbro direito a logica de tudo…mais ao q me lembro é isso…

a… nos JTextField que se coloca os ip, eu tirei os valor que começa pq sao endereços daki do meuserviço, dexei as linha setando nada, só vc coloca os ip que vc quiser, la na classe janela em:

ip[ ].setText(""); //<<— onde i é qual dos endereço, o primeiro, o segundo…etc…

mandei pro email uma explicaçãozinha rapida de como q se usa, qualquer duvida responde o email com a duvida…

Tamba, na parte la do comando do ping, vc pode dexa só o comando, tipo tira o cmd /c, e ao inves de dexa ping -n la na variavel comando dexa ping -c (que é o equivalente em linux, pra informa a quantidade de pacote a ser mandada)

fiz esse metodo aqui que faz essa parte, vc manda um ippra ele e ele retorna a resposta:


public String metodo(String ip){
        String resposta="";
        String comando="ping -c 1 "+ip;
        try {
            Scanner S = new Scanner( Runtime.getRuntime().exec(comando).getInputStream());  
            while(S.hasNextLine()) {  
               resposta+=S.nextLine()+"\n";  
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return resposta;
    }

quanto a otra parte, a do net send, isso é um serviço do proprio windows em que abre uma janelinha no pc que for especificado mandando a mensagem q vc tiver especificado, por isso teria que mudar o comando nessa classe se for usado em linux.

pra isso eu aconselho vc a estuda o shell do linux, coisa do tipo, e então coloca um comando que vc considere apropriado la, eu nao conheço nenhum (o mais parecido que eu conheço seria o echo, mais nao é nem um pouco proximo…).

eu tava querendo manda email com essa aplicação ai mais nao sei fazer isso então dexei pra la…

[color=violet]É que na verdade, vou desenvolver uma aplicação JSP para controlar um servidor, dai preciso que ele mande comando pra o console. Eu desconhecia o Runtime :stuck_out_tongue:

Mas agora tenho o teu codigo como exemplo, ainda mais no fato do retorno da tela, pois o ping retorna informações, e os comandos também irão retornar.

Muito obrigado pela ajuda :)[/color]

Estude o protocolo ICMP se quiser implementar algo ‘de verdade’ :wink:

maior_abandonado !!

Obrigado mais uma vez pela ajuda e pela explicação qualquer coisa eu falo com vc pelo email …

Obrigado parceiro vc me ajudou bastante !!!

Amigo, você poderia enviar para o meu e-mail: grsouzafilho@gmail.com todo este código, com a aplicação?
obrigado!

[quote=maior_abandonado]ow…mals…classe errada… a q da o ping é essa aki

[code]

import java.io.IOException;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class execucao {

public static void main(String args[]){
    String ip="www.uol.com.br", resp="";
    execucao obj=new execucao();
    resp=obj.pinga("www.iwts.com.br");
    JOptionPane.showMessageDialog(null, resp);
}

public String pinga(String ip){
String resposta="";
int fim=0;
boolean kbo=false;
String comando = new String("ping -n 1 -w 600 "+ip);
    try {
        Scanner s = new Scanner( Runtime.getRuntime().exec("cmd /c " + comando).getInputStream());  
        while(s.hasNextLine()) {  
            resposta=s.nextLine()+"\n";  
            fim=resposta.length()-8;

            for (int j=0;j<=fim;j++){
                if (resposta.substring(j, 8+j).equals("Resposta")){
                    kbo=true;
                    //JOptionPane.showMessageDialog(null, "encontrei o q procurava, é "+resposta.substring(j, 8+j));
                    break;
                } 
                //JOptionPane.showMessageDialog(null, resposta);
            }
            if (kbo==true)
                break;
            else
                resposta="HOST DOWN";
        }  
    } catch (Exception e) {
    }  


return resposta;
}

public execucao() {

}

}

[/code][/quote]

Olá poderia me enviar o fonte completo por email leandromarrom@hotmail.com
Obrigado valew´s

Boa tarde, se puder mandar pra mim tambem agradeço: carlos_ds_jar@yahoo.com.br

Boa noite, me interessei por isso tambem, se possivel tambem quero seu projeto todo. vou estudar isso a fundo. obrigado!

meu email é dif1982@hotmail.com

Se o autor do tópico de 2007 ainda voltar aqui, seria melhor usar a opção de attachments do GUJ para deixar o código anexado ao tópico. Isso evitaria que os usuários ficassem postando seus e-mails.

Pessoal, lembrem-se que o GUJ é um fórum público e, assim como nós podemos ler o seu conteúdo, softwares que procuram e-mails para envio de SPAM também podem.

Bah, é verdade… acho que ele ja deveria ter usado isso a muito tempo… com o conteudo compactado…

mas se o autor nao aparecer… será que alguem que recebeu dele… poderia anexar o arquivo?

puts cara, era isso q eu precisava…

sera q alguem conseguiu o software??..

Olá…como faço para exibir essa saida em um jTextArea?

[quote=maior_abandonado]Tamba, na parte la do comando do ping, vc pode dexa só o comando, tipo tira o cmd /c, e ao inves de dexa ping -n la na variavel comando dexa ping -c (que é o equivalente em linux, pra informa a quantidade de pacote a ser mandada)

fiz esse metodo aqui que faz essa parte, vc manda um ippra ele e ele retorna a resposta:


public String metodo(String ip){
        String resposta="";
        String comando="ping -c 1 "+ip;
        try {
            Scanner S = new Scanner( Runtime.getRuntime().exec(comando).getInputStream());  
            while(S.hasNextLine()) {  
               resposta+=S.nextLine()+"\n";  
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return resposta;
    }

quanto a otra parte, a do net send, isso é um serviço do proprio windows em que abre uma janelinha no pc que for especificado mandando a mensagem q vc tiver especificado, por isso teria que mudar o comando nessa classe se for usado em linux.

pra isso eu aconselho vc a estuda o shell do linux, coisa do tipo, e então coloca um comando que vc considere apropriado la, eu nao conheço nenhum (o mais parecido que eu conheço seria o echo, mais nao é nem um pouco proximo…).

eu tava querendo manda email com essa aplicação ai mais nao sei fazer isso então dexei pra la…[/quote]

Resolvi o problema da exibição no jTextArea com o seguinte trecho:

Process ping = Runtime.getRuntime().exec("ping -n 1 " + tEndereco.getText());
Scanner in = new Scanner((ping.getInputStream()));
while ((in.hasNext())) {
jTextArea1.append(in.nextLine() + “\n”);
}

O problema é que o resultado do ping é apresentado bagunçado, isto é, exibe uma informação em uma linha do jTextArea, salta várias e exibe na próxima. Além disso, não são exibidos os acentos. Veja a seguir:

Resposta de 192.168.1.7: bytes=32 tempo<1ms TTL=127

Resposta de 192.168.1.7: bytes=32 tempo<1ms TTL=127

Estat�sticas do Ping para 192.168.1.7:

Pacotes: Enviados = 2, Recebidos = 2, Perdidos = 0 (0% de perda),

Aproximar um n�mero redondo de vezes em milissegundos:

M&#65533;nimo = 0ms, M&#65533;ximo = 0ms, M&#65533;dia = 0ms

Opa chefe bom d+, tem como você enviar este projeto para meu email.
aquilesmaior@gmail.com

Obrigado!!!