Estou precisando de ajuda de vocês para descobrir o IP externo do usuário que está acessando nossa aplicação web, uso JAVA + JSF.
Estava usando este métodos, mas descobri que ele retorna sempre o IP interno:
public static String retornIp() {
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
String ip = request.getRemoteAddr();
System.out.println(ip);
return ip;
}
Procurei na Internet e encontrei estas 2 classes que trabalham em conjunto:
1ª)
public class PegandoIps {
String ipLocal = "";
String ipExterno = "";
String linhas = null;
Matcher m;
String ipMaquina(){
try{
InetAddress end = InetAddress.getLocalHost();
ipLocal = end.getHostAddress().toString();
URL url = new URL(new VerificaSite().verificandoSite());
HttpURLConnection conexao = (HttpURLConnection) url.openConnection();
BufferedReader buffer = new BufferedReader(new InputStreamReader(conexao.getInputStream()));
Pattern pega = Pattern.compile("[0-9]{1,3}[.-]{1}[0-9]{1,3}[.-]{1}[0-9]{1,3}[.-]{1}[0-9]{1,3}");
while((linhas = buffer.readLine()) != null){
m = pega.matcher(linhas);
while(m.find()){
ipExterno = m.group();
}
}
buffer.close();
conexao.disconnect();
} catch(MalformedURLException e1){
System.exit(1);
}catch(IOException e2){
System.exit(1);
}
return ipExterno.replace("-", ".");
}
}
2ª)
public class VerificaSite
public String verificandoSite(){
String[] site = {"http://www.meuenderecoip.com", "http://meuip.datahouse.com.br",
"http://www.hlera.com.br/meu_ip/", "http://www.abusar.org.br",
"http://www.mostrarip.com.br"};
String siteValido = "";
for(int i = 0; i < site.length; i++){
try {
URL url = new URL(site[i]);
HttpURLConnection conexao = (HttpURLConnection) url.openConnection();
int codigo = conexao.getResponseCode();
if(codigo == 200){
siteValido = site[i];
}
} catch (Exception e) {
}
}
return siteValido;
}
}
Como o Java está fazendo a conexão com os sites, está gravando sempre o nosso IP no banco de dados.Será que alguém pode me dar uma luz?