eu pretendo colocar no meu aplicativo um JTextField para que o
usuário insira um número de IP(ele vai ter que digitar os pontos e
tudo)… daí eu gostaria de pegar essa string e validar para ver se
o usuário não escreveu bobeira…
existe função em java que faz isso ?
Porque não usa métodos do servlet para pegar o IP do usuário ao invés de pedir para ele digitar? E se for aplicação desktop você pode pegar de vários modos, um deles com algo tipo ipconfig.
[]s
Luca
D
denakitan
estou trabalhando como estagiário na programação de um jogo multiplayer
no servidor preciso configurar o IP do session host que fará
a ligação entre o servidor e o cliente… como pode existir
muitos session hosts, eu gostaria de poder digitar o ip do session host
para informar ao servidor onde o session host está
P
pcalcado
Ué, tu quer valdiar um IP?
if(segmento<0||segmento>255)returnfalse
faça um for para o número de segmentos da sua classe.
Agora que você explicou posso responder com mais certeza: a menos que seus clientes estejam atrás de um proxy não é necessário pedir que digitem o endereço IP. Você pode obter isto com facilidade usando o método getRemoteAddr da classe ServletRequest e armazenar esta informação no objeto session.
Atrás de proxies o negócio fica mais difícil, as vezes quase impossível. Alguns proxies completam o request com um header tipo “X-Forwarded” ou “X-Forward-IP” ou algo similar. Este header contém o IP “real”. Já se o cara estiver atrás de um proxy anônimo então babau. só perguntando mesmo e ele vai responder qq coisa menos o IP dele.
[]s
Luca
D
denakitan
danieldestro,
consegui testar sua dica, usando a expressão regular
Bom, deixa eu tentar tambem, preferiria criar uma regex mais simples como:
Pattern pattern = Pattern.compile("(\d{1,3}\.){3}\d{1,3}");
E se passar por ela usar o split para validar cada seguimento. No mais, se sua aplicação desktop vai pegar o endereço do host do cliente, o java.net.InetAddress resolve pra vc. Dá uma olhada nas docs.
valeuz…
I
Ironlynx
Humm gostei da forma q o ganza fez…mas pow é via TextField a passagem de parâmetros né?Não fica as vezes mais fácil fazer um JFormattedTextField e receber cada pedacinho da máscara como uma stringzinha a ser tratada? (aí o primeiro exemplo do Philip seria o mais simples e tranquilo de se fazer!)
fiz um método estático que me serviu. Espero que ajude vocês.
/** * Verifica se um endereço IP é válido * @param ipAddress String contendo o endereço IP a ser testado * @return TRUE caso o IP seja válido e FALSE caso seja inválido */publicstaticbooleanisEnderecoIpValido(StringipAddress){//Checa se o comprimento da string é menor que 6 e maior que 15//Minimo 1.1.1.1 Máximo 255.255.255.255if(ipAddress.length()<6||ipAddress.length()>15){returnfalse;}//Quebrando a string em array pelo símbolo . deve ser gerado um array //com 4 itensString[]itens=ipAddress.split(".");if(itens.length!=4){returnfalse;}booleanretorno=true;try{for(Stringitem:itens){if(Integer.parseInt(item)<1||Integer.parseInt(item)>255){retorno=false;}}//Exception capsulada pois o objetivo do método é só testar o endereço }catch(NumberFormatExceptionex){retorno=false;}returnretorno;}
Abs!
Jefferson
R
root_
No seu código… na linha 10, o minimo seria 7 não??
4 numeros de 1 digito + 3 pontos(".") = 7, nao 6!
J
jeffprestes
root_:
No seu código… na linha 10, o minimo seria 7 não??
4 numeros de 1 digito + 3 pontos(".") = 7, nao 6!
Perfeito! Você tem razão. É por isso que eu acredito no pair programming.
O que você acha de copiar meu código acima e postar novamente com essa refatoração? Assim ficará um exemplo corrigido para outra pessoa poder usar.
Parabéns pela iniciativa e obrigado pelo aviso!
Um abraço.
R
root_
CÓDIGO DO JEFFPRESTES COM ALGUMAS MODIFICAÇOES ( JA A SUPORTAR SITUAÇAO DE IPV6 E TAMANHO MÍNIMO CORRIGIDO )
// valida um ip IPV4/IPV6publicstaticbooleandtv_ValidaIp(Stringip,intIPV){String[]ipSplit={""};switch(IPV){caseIPV4://Minimo 1.1.1.1 Máximo 255.255.255.255if(ip.length()<7||ip.length()>15)returnfalse;ipSplit=ip.split(".");if(ipSplit.length!=4)returnfalse;break;caseIPV6://Minimo 1.1.1.1.1.1 Máximo 255.255.255.255.255.255if(ip.length()<11||ip.length()>23)returnfalse;ipSplit=ip.split(".");if(ipSplit.length!=6)returnfalse;break;}try{for(StringipContext:ipSplit)if(Integer.parseInt(ipContext)<1||Integer.parseInt(ipContext)>255)returnfalse;}catch(NumberFormatExceptionex){returnfalse;}returntrue;}