Então mas ai…se vc acessa um site que mostra IP ele te da o Ip da internet…não teria um esquema de pingar o site ou sei la…de uma maneira que ele retorne o IP???
Meus caros colegas, não eh querer falar nada, mas o intuito deste tópico é para alguém arrumar ou dar uma classe que pegue o IP externo da máquina e exiba para o usuário !!!
Olha, eu tentei até ver se com tracert / traceroute dava para pegar essa informação, com ipconfig / ifconfig, e todas as ferramentas que usei não deram uma pista boa. Com tracert cheguei perto, mas não consegui a informação correta.
O modo mais simples é então fazer seu aplicativo conectar-se a alguma aplicação WEB bastante simples, mas que esteja hospedado em uma máquina na Internet. Se sua aplicação é Web e já está na Internet então esse IP é fácil de obter - algo como request.getHeader (“não lembro qual é o nome correto do header que contém essa informação”). Você pode listar os headers do request para ver qual deles tem a informação desejada, e se o seu web server lhe fornece essa informação.
Uma forma simples de saberes qual o ip que o teu ISP te atribui, é da seguinte forma:
1-enviar o request para o link http://www.whatismyip.com
2-ler os dados devolvidos (entre outra informação contém o teu ip)
3-imprimir/guardar/… o ip lido
try {
URL url = new URL("http://www.whatismyip.com");
HttpURLConnection conexao = (HttpURLConnection) url.openConnection();
conexao.connect();
java.io.BufferedReader br = new java.io.BufferedReader(new java.io.InputStreamReader(conexao.getInputStream()));
String title = "";
for (int i = 0; i < 5; i++)
title = br.readLine();
String meuIP = title.substring(title.indexOf("Is ") + 3, title.indexOf(" WhatIsMyIP.com"));
System.out.println(meuIP);
br.close();
} catch (Exception e) {
e.printStackTrace();
}
Como de costume, aqui dou a receita de bolo para listar os headers para você incluir em uma página JSP - é interessante, para saber o que está vindo na sua página - attributes, parameters & headers.
out.println ("</pre><h3>request.getAttributeNames</h3><pre>");
for (en = request.getAttributeNames(), i = 1; en.hasMoreElements(); ++i) {
String attrName = (String)en.nextElement();
out.println (i + ": " + attrName + "=" + request.getAttribute (attrName).toString());
}
out.println ("</pre><h3>request.getHeaderNames</h3><pre>");
for (en = request.getHeaderNames(), i = 1; en.hasMoreElements(); ++i) {
String name = (String)en.nextElement();
out.println (i + ": " + name + "=" + request.getHeader(name).toString());
}
out.println ("</pre><h3>request.getParameterNames</h3><pre>");
for (en = request.getParameterNames(), i = 1; en.hasMoreElements(); ++i) {
String name = (String)en.nextElement();
out.println (i + ": " + name + "=" + request.getParameter(name).toString());
}
EDIT - Esse site “whatismyip” é muito interessante. Obrigado pela dica, pek
Galera, se você procura por como pegar o ip externo no google, você encontra este tópico. E estes métodos citados acima já não são mais válidos, então vou upar o tópico só para dar um suporte para a galera de 2013.
private static String getIP(){
String ip = "Não definido";
try {
URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = null;
in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
ip = in.readLine();
} catch (IOException e) {}
return ip;
}