Buenas, quiero compartir con ustedes una forma de obtener la ip publica/privada del cliente desde smartGwt/Gwt y desde javaScript, dado que un ida de estos me toco implementarlo en mi proyecto, aclaro que esto es el resultado de mis plegarias a san Google
, por lo tanto la solución no es 100% propia y la verdad ya ni me acuerdo de donde lo saque pero igual quiero compartirla con ustedes.
El contexto es el siguiente, tenemos una aplicación que trabaja con SmartGwt o Gwt y queremos obtener la ip del cliente sin tener que molestar al servidor(por determinada razón o limitación) entonces la solución es la siguiente, hay dos formas:
1. Desde SmartGwt/Gwt directamente utilizando la siguiente instrucción:
Código:
String cadenaIp = GWT.getHostPageBaseURL();
la cual nos devuelve una cadena que contiene la ip local pero también trae el alias (si existe) y otros datos, por consiguiente luego habría que descomponerla pero eso es lo de menos, el resultado obtenido en mi caso es asi:
http://127.0.0.1/debug/ 2. La otra forma de hacerlo es utilizando JSNI(JavaScript Native Interface), de esta forma definimos una funcion javaScript en el archivo html de nuestra aplicación y luego la llamamos desde SmartGwt/Gwt mediante un metodo, esto lo podríamos hacer mas o menos asi:
Llamada desde smartGwt/Gwt:
Código:
String str_User_ip = getIP();
Maetodo SmartGwt/Gwt:
Código:
public native String getIP() /*-{
return $wnd.myIP();
}-*/;
Funcion JavaScript:
Código:
Código Javascript
:
Ver original<script type="text/javascript" language="javascript">
//Recupera ip privada
function myIP() {
var cadenaIp = java.net.InetAddress.getLocalHost();
var ip = cadenaIp.getHostAddress();
return ip
}
//Recupera ip publica
function myIP() {
if (window.XMLHttpRequest)
xmlhttp = new XMLHttpRequest();
else
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
xmlhttp.open("GET","http://api.hostip.info/get_html.php",false);
xmlhttp.send();
hostipInfo = xmlhttp.responseText.split("\n");
for (i=0; hostipInfo.length >= i; i++) {
ipAddress = hostipInfo[i].split(":");
if ( ipAddress[0] == "IP" )
return ipAddress[1];
}
return false;
</script>
Dejo las dos funciones para quien necesite la publica o la privada (recuerden no colocar las 2 con el mismo nombre o comentar una de las 2 cuando vayan a usar cualquiera), como les dije esto me funciono a mi con smartGwt/Gwt + eclipse y simplemente quería compartirlo, no se si el post encaja acá o si ya existen otros con información similar así que siéntanse libres de eliminarlo, molerlo etc etc en caso de ser necesario.