Obter o ip real?

Pessoal,

Eu tenho a seguinte classe…

import java.net.*;

public class Ip{ 
   public static void main(String []args){ 
		try{ 
			InetAddress myself = InetAddress.getLocalHost (); 
			host=myself.getHostName();
			endereco=myself.getHostAddress(); 
		}catch (UnknownHostException ex){          
			ex.printStackTrace();
		}
println("HostName: "+host+" IP: "+endereco);
}
}

Só que ele me retorna o ip na rede caso haja um router por exemplo…teria como eu pegar o IP real da maquina na internet… ???

Valew

Não, porque o IP real só existe do outro lado do roteador.

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???

Exato - vc precisa de uma maquina do outro lado do roteador pra te dizer qual eh o seu IP real. :wink:

É melhor usar um site como o http://grc.com, que tem uma ferramenta de detecção de vulnerabilidades - o Shields Up!.

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

Espero ter ajudado. :slight_smile:

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

VALEWWWWWWWWWWWWWWWWW…

Rodou belezinha…

Ola, achei algo mais simples que funcionou tbm:
package utils;
import java.net.HttpURLConnection;
import java.net.URL;

public class Pega_IP
{

public static void main(String[] args) 
{
	try 
	{
		URL url = new URL("http://whatismyip.com/automation/n09230945.asp");
		HttpURLConnection conexao = (HttpURLConnection) url.openConnection();
		conexao.connect();
		java.io.BufferedReader pagina = new java.io.BufferedReader(new java.io.InputStreamReader(conexao.getInputStream()));
		String meuIP = pagina.readLine();
		System.out.println(meuIP);
		pagina.close();
	} 
	catch (Exception e) 
	{
		e.printStackTrace();
	}
}

}

tá mais e se amanha esse site ai sai fora do ar?

naum tem algo que eu possa colocar na minha aplicacao web que estraia o ip real?

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