Como pegar o IP do modem em Java?

Como pegar o IP do modem em Java? A String ipOndeEstou precisa me retornar o IP do modem e não o local.

public static void main(String[] args) {
		
	try{
		String ipOndeEstou = java.net.InetAddress.getLocalHost().getHostAddress(); //Quero o IP externo que chegou no modem.
		String ipAdministrativo = java.net.InetAddress.getByName("administrativo.teste.br").getHostAddress();
		String ipAcademico = java.net.InetAddress.getByName("academico.teste.br").getHostAddress();
		System.out.println(ipOndeEstou);
		System.out.println(ipAdministrativo);
		System.out.println(ipAcademico);
	
	}catch(Exception ex){

	}

	
	
}

Output:

192.168.99.186 // Eu não quero esse IP. Quero o IP externo que chegou no modem.
177.220.175.162
177.220.175.113

Você não vai conseguir obter o IP externo do modem através do InetAddress.

Sugiro que use a classe URL para acessar algum serviço que retorne o seu IP externo.

Exemplo:

URL whatismyip = new URL("http://checkip.amazonaws.com");
BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
String ip = in.readLine();
System.out.println(ip);
1 curtida

O problema é que se eu fizer assim, o ip que retornar é o do servidor onde minha aplicação Java Web está rodando.
O que preciso é do IP do modem do cliente que tá acessando o sistema.
Como eu poderia fazer?

Tá mas você postou um código com método main, o que caracteriza uma aplicação desktop e não web.

Se você tem uma aplicação web, você pode obter o IP de quem acessou seu serviço através do método getRemoteAddr() da classe HttpServletRequest.

1 curtida

Estava somente testando com o main, mas já deu certo com o getRemoteAddr() da classe HttpServletRequest na aplicação Web… Obrigado!

1 curtida

Cara não sei se te ajuda…
Uso assim no JSF… funciona…

FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest();
String ip = request.getRemoteAddr();

Opa, ñ tinha lido, mal!