Necesito recuperar de alguna manera la dirección IP del cliente usando JavaScript; sin código del lado del servidor, ni siquiera SSI.
Sin embargo, no estoy en contra de usar un script / servicio gratuito de terceros.
fuente
Necesito recuperar de alguna manera la dirección IP del cliente usando JavaScript; sin código del lado del servidor, ni siquiera SSI.
Sin embargo, no estoy en contra de usar un script / servicio gratuito de terceros.
Usaría un servicio web que puede devolver JSON (junto con jQuery para simplificar las cosas). A continuación se encuentran todos los servicios de búsqueda de IP activos gratuitos que pude encontrar y la información que devuelven. Si conoce más, agregue un comentario y actualizaré esta respuesta.
Pruébelo: https://www.cloudflare.com/cdn-cgi/trace
// If your site is on Cloudflare, then you can use '/cdn-cgi/trace' instead
$.get('https://www.cloudflare.com/cdn-cgi/trace', function(data) {
console.log(data)
})
Devoluciones:
fl=4f422
h=www.cloudflare.com
ip=54.193.27.106
ts=1575967108.245
visit_scheme=https
uag=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36 Hypothesis-Via
colo=SJC
http=http/1.1
loc=US
tls=TLSv1.3
sni=plaintext
warp=off
Limitaciones:
Pruébelo: http://api.db-ip.com/addrinfo?api_key= < su clave de API > & addr = < dirección IP >
Devoluciones:
{
"address": "116.12.250.1",
"country": "SG",
"stateprov": "Central Singapore",
"city": "Singapore"
}
Limitaciones:
Pruébelo: http://gd.geobytes.com/GetCityDetails
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"geobytesforwarderfor": "",
"geobytesremoteip": "116.12.250.1",
"geobytesipaddress": "116.12.250.1",
"geobytescertainty": "99",
"geobytesinternet": "SA",
"geobytescountry": "Saudi Arabia",
"geobytesregionlocationcode": "SASH",
"geobytesregion": "Ash Sharqiyah",
"geobytescode": "SH",
"geobyteslocationcode": "SASHJUBA",
"geobytescity": "Jubail",
"geobytescityid": "13793",
"geobytesfqcn": "Jubail, SH, Saudi Arabia",
"geobyteslatitude": "27.004999",
"geobyteslongitude": "49.660999",
"geobytescapital": "Riyadh ",
"geobytestimezone": "+03:00",
"geobytesnationalitysingular": "Saudi Arabian ",
"geobytespopulation": "22757092",
"geobytesnationalityplural": "Saudis",
"geobytesmapreference": "Middle East ",
"geobytescurrency": "Saudi Riyal",
"geobytescurrencycode": "SAR",
"geobytestitle": "Saudi Arabia"
}
Limitaciones:
Pruébalo: https://json.geoiplookup.io/api
$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1",
"isp": "SGPOST",
"org": "Singapore Post Ltd",
"hostname": "116.12.250.1",
"longitude": "103.807",
"latitude": "1.29209",
"postal_code": "",
"city": "Singapore",
"country_code": "SG",
"country_name": "Singapore",
"continent_code": "AS",
"region": "Central Singapore",
"district": "",
"timezone_name": "Asia\/Singapore",
"connection_type": "",
"asn": "AS3758 SingNet",
"currency_code": "SGD",
"currency_name": "Singapore Dollar",
"success": true
}
Limitaciones:
Pruébalo: http://www.geoplugin.net/json.gp
$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"geoplugin_request": "116.12.250.1",
"geoplugin_status": 200,
"geoplugin_credit": "Some of the returned data includes GeoLite data created by MaxMind, available from <a href=\\'http://www.maxmind.com\\'>http://www.maxmind.com</a>.",
"geoplugin_city": "Singapore",
"geoplugin_region": "Singapore (general)",
"geoplugin_areaCode": "0",
"geoplugin_dmaCode": "0",
"geoplugin_countryCode": "SG",
"geoplugin_countryName": "Singapore",
"geoplugin_continentCode": "AS",
"geoplugin_latitude": "1.2931",
"geoplugin_longitude": "103.855797",
"geoplugin_regionCode": "00",
"geoplugin_regionName": "Singapore (general)",
"geoplugin_currencyCode": "SGD",
"geoplugin_currencySymbol": "$",
"geoplugin_currencySymbol_UTF8": "$",
"geoplugin_currencyConverter": 1.4239
}
Limitaciones:
Pruébelo: https://api.hackertarget.com/geoip/?q= < dirección IP >
Devoluciones:
IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797
Limitaciones:
Pruébalo: https://ipapi.co/json/
$.getJSON('https://ipapi.co/json/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1",
"city": "Singapore",
"region": "Central Singapore Community Development Council",
"country": "SG",
"country_name": "Singapore",
"postal": null,
"latitude": 1.2855,
"longitude": 103.8565,
"timezone": "Asia/Singapore"
}
Limitaciones:
Pruébalo: http://ip-api.com/json
$.getJSON('http://ip-api.com/json?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"as": "AS3758 SingNet",
"city": "Singapore",
"country": "Singapore",
"countryCode": "SG",
"isp": "SingNet Pte Ltd",
"lat": 1.2931,
"lon": 103.8558,
"org": "Singapore Telecommunications",
"query": "116.12.250.1",
"region": "01",
"regionName": "Central Singapore Community Development Council",
"status": "success",
"timezone": "Asia/Singapore",
"zip": ""
}
Limitaciones:
Pruébalo: https://api.ipdata.co
$.getJSON('https://api.ipdata.co', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1",
"city": "Singapore",
"region": "Central Singapore Community Development Council",
"region_code": "01",
"country_name": "Singapore",
"country_code": "SG",
"continent_name": "Asia",
"continent_code": "AS",
"latitude": 1.2931,
"longitude": 103.8558,
"asn": "AS3758",
"organisation": "SingNet",
"postal": "",
"calling_code": "65",
"flag": "https://ipdata.co/flags/sg.png",
"emoji_flag": "\ud83c\uddf8\ud83c\uddec",
"emoji_unicode": "U+1F1F8 U+1F1EC",
"is_eu": false,
"languages": [
{
"name": "English",
"native": "English"
},
{
"name": "Malay",
"native": "Bahasa Melayu"
},
{
"name": "Tamil",
"native": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd"
},
{
"name": "Chinese",
"native": "\u4e2d\u6587"
}
],
"currency": {
"name": "Singapore Dollar",
"code": "SGD",
"symbol": "S$",
"native": "$",
"plural": "Singapore dollars"
},
"time_zone": {
"name": "Asia/Singapore",
"abbr": "+08",
"offset": "+0800",
"is_dst": false,
"current_time": "2018-05-09T12:28:49.183674+08:00"
},
"threat": {
"is_tor": false,
"is_proxy": false,
"is_anonymous": false,
"is_known_attacker": false,
"is_known_abuser": false,
"is_threat": false,
"is_bogon": false
}
}
Limitaciones:
Pruébelo: https://ipfind.co/me?auth= < su clave de API >
$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip_address": "116.12.250.1",
"country": "Singapore",
"country_code": "SG",
"continent": "Asia",
"continent_code": "AS",
"city": "Singapore",
"county": null,
"region": "Central Singapore",
"region_code": "01",
"timezone": "Asia/Singapore",
"owner": null,
"longitude": 103.8565,
"latitude": 1.2855,
"currency": "SGD",
"languages": [
"cmn",
"en-SG",
"ms-SG",
"ta-SG",
"zh-SG"
]
}
Limitaciones:
Pruébelo: https://api.ipgeolocation.io/ipgeo?apiKey= < su clave de api >
$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1",
"continent_code": "AS",
"continent_name": "Asia",
"country_code2": "SG",
"country_code3": "SGP",
"country_name": "Singapore",
"country_capital": "Singapore",
"state_prov": "Central Singapore",
"district": "",
"city": "Singapore",
"zipcode": "",
"latitude": "1.29209",
"longitude": "103.807",
"is_eu": false,
"calling_code": "+65",
"country_tld": ".sg",
"languages": "cmn,en-SG,ms-SG,ta-SG,zh-SG",
"country_flag": "https://ipgeolocation.io/static/flags/sg_64.png",
"isp": "SGPOST",
"connection_type": "",
"organization": "Singapore Post Ltd",
"geoname_id": "1880252",
"currency": {
"name": "Dollar",
"code": "SGD"
},
"time_zone": {
"name": "Asia/Singapore",
"offset": 8,
"is_dst": false,
"current_time": "2018-06-12 09:06:49.028+0800"
}
}
Limitaciones:
Pruébalo: https://api.ipify.org/?format=json
$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1"
}
Limitaciones:
Pruébelo: https://api.ipinfodb.com/v3/ip-city/?key= < your api key > & format = json
$.getJSON('https://api.ipinfodb.com/v3/ip-city/?key=<your_api_key>&format=json&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"statusCode": "OK",
"statusMessage": "",
"ipAddress": "116.12.250.1",
"countryCode": "SG",
"countryName": "Singapore",
"regionName": "Singapore",
"cityName": "Singapore",
"zipCode": "048941",
"latitude": "1.28967",
"longitude": "103.85",
"timeZone": "+08:00"
}
Limitaciones:
Pruébalo: https://ipinfo.io/json
$.getJSON('https://ipinfo.io/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1",
"hostname": "No Hostname",
"city": "Singapore",
"region": "Central Singapore Community Development Council",
"country": "SG",
"loc": "1.2931,103.8558",
"org": "AS3758 SingNet"
}
Limitaciones:
Pruébelo: https://api.ipregistry.co/?key= < su clave de api >
$.getJSON('https://api.ipregistry.co/?key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip" : "116.12.250.1",
"type" : "IPv4",
"hostname" : null,
"carrier" : {
"name" : null,
"mcc" : null,
"mnc" : null
},
"connection" : {
"asn" : 3758,
"domain" : "singnet.com.sg",
"organization" : "SingNet Pte Ltd",
"type" : "isp"
},
"currency" : {
"code" : "SGD",
"name" : "Singapore Dollar",
"plural" : "Singapore dollars",
"symbol" : "SGD",
"symbol_native" : "SGD",
"format" : {
"negative" : {
"prefix" : "-SGD",
"suffix" : ""
},
"positive" : {
"prefix" : "SGD",
"suffix" : ""
}
}
},
"location" : {
"continent" : {
"code" : "AS",
"name" : "Asia"
},
"country" : {
"area" : 692.0,
"borders" : [ ],
"calling_code" : "65",
"capital" : "Singapore",
"code" : "SG",
"name" : "Singapore",
"population" : 5638676,
"population_density" : 8148.38,
"flag" : {
"emoji" : "🇸🇬",
"emoji_unicode" : "U+1F1F8 U+1F1EC",
"emojitwo" : "https://cdn.ipregistry.co/flags/emojitwo/sg.svg",
"noto" : "https://cdn.ipregistry.co/flags/noto/sg.png",
"twemoji" : "https://cdn.ipregistry.co/flags/twemoji/sg.svg",
"wikimedia" : "https://cdn.ipregistry.co/flags/wikimedia/sg.svg"
},
"languages" : [ {
"code" : "cmn",
"name" : "cmn",
"native" : "cmn"
}, {
"code" : "en",
"name" : "English",
"native" : "English"
}, {
"code" : "ms",
"name" : "Malay",
"native" : "Melayu"
}, {
"code" : "ta",
"name" : "Tamil",
"native" : "தமிழ்"
}, {
"code" : "zh",
"name" : "Chinese",
"native" : "中文"
} ],
"tld" : ".sg"
},
"region" : {
"code" : null,
"name" : "Singapore"
},
"city" : "Singapore",
"postal" : "96534",
"latitude" : 1.28967,
"longitude" : 103.85007,
"language" : {
"code" : "cmn",
"name" : "cmn",
"native" : "cmn"
},
"in_eu" : false
},
"security" : {
"is_bogon" : false,
"is_cloud_provider" : false,
"is_tor" : false,
"is_tor_exit" : false,
"is_proxy" : false,
"is_anonymous" : false,
"is_abuser" : false,
"is_attacker" : false,
"is_threat" : false
},
"time_zone" : {
"id" : "Asia/Singapore",
"abbreviation" : "SGT",
"current_time" : "2019-09-29T23:13:32+08:00",
"name" : "Singapore Standard Time",
"offset" : 28800,
"in_daylight_saving" : false
}
}
Limitaciones:
Pruébelo: http://api.ipstack.com/ < dirección IP >? Access_key = <su clave de API>
$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1",
"type": "ipv4",
"continent_code": "AS",
"continent_name": "Asia",
"country_code": "SG",
"country_name": "Singapore",
"region_code": "01",
"region_name": "Central Singapore Community Development Council",
"city": "Singapore",
"zip": null,
"latitude": 1.2931,
"longitude": 103.8558,
"location": {
"geoname_id": 1880252,
"capital": "Singapore",
"languages": [{
"code": "en",
"name": "English",
"native": "English"
},
{
"code": "ms",
"name": "Malay",
"native": "Bahasa Melayu"
},
{
"code": "ta",
"name": "Tamil",
"native": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd"
},
{
"code": "zh",
"name": "Chinese",
"native": "\u4e2d\u6587"
}],
"country_flag": "http:\/\/assets.ipstack.com\/flags\/sg.svg",
"country_flag_emoji": "\ud83c\uddf8\ud83c\uddec",
"country_flag_emoji_unicode": "U+1F1F8 U+1F1EC",
"calling_code": "65",
"is_eu": false
}
}
Limitaciones:
Pruébalo: https://jsonip.com
$.getJSON('https://jsonip.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1",
"about": "https://jsonip.com/about",
"Pro!": "http://getjsonip.com",
"Get Notifications": "https://jsonip.com/notify"
}
Limitaciones:
Pruébalo: http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"ip": "116.12.250.1"
}
Limitaciones:
Pruébalo: https://geoip.nekudo.com/api
$.getJSON('https://geoip.nekudo.com/api', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluciones:
{
"city": "Singapore",
"country": {
"name": "Singapore",
"code": "SG"
},
"location": {
"accuracy_radius": 50,
"latitude": 1.2855,
"longitude": 103.8565,
"time_zone": "Asia/Singapore"
},
"ip": "116.12.250.1"
}
Limitaciones:
Tenga en cuenta que, dado que todos estos servicios son gratuitos, su millaje puede variar en términos de exceder la cuota y el tiempo de actividad, y quién sabe cuándo / si se desconectarán en el futuro ( Anexo A: Telize ). La mayoría de estos servicios también ofrecen un nivel de pago en caso de que desee más funciones como el soporte SSL.
Además, como señaló skobaljic en los comentarios a continuación, las cuotas de solicitud son principalmente académicas, ya que esto está sucediendo en el lado del cliente y la mayoría de los usuarios finales nunca excederán la cuota.
ACTUALIZACIONES
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });
Actualización final
Esta solución ya no funcionaría porque los navegadores están reparando la fuga webrtc: para obtener más información al respecto, lea esta otra pregunta: RTCIceCandidate ya no devuelve IP
Actualización : siempre quise hacer una versión min / uglified del código, así que aquí hay un código de promesa de ES6:
Nota: Este nuevo código minimizado devolvería solo una única IP si desea todas las IP del usuario (que pueden ser más dependientes de su red), use el código original ...
Gracias a WebRTC , es muy fácil obtener IP local en navegadores compatibles con WebRTC (al menos por ahora). Modifiqué el código fuente, reduje las líneas, no hice ninguna solicitud de aturdimiento, ya que solo desea IP local, no la IP pública, el código a continuación funciona en Firefox y Chrome más recientes, solo ejecute el fragmento y verifíquelo usted mismo:
Lo que está sucediendo aquí es que estamos creando una conexión simulada entre pares, y para que el par remoto se comunique con nosotros, generalmente intercambiamos candidatos de hielo entre nosotros. Y leyendo los candidatos de hielo (de la descripción de la sesión local y onIceCandidateEvent) podemos decir la IP del usuario.
de donde tomé el código -> Fuente
fuente
Puede, retransmitiéndolo a través del servidor con JSONP
Y mientras busco en Google para encontrar uno, lo encontré aquí en SO ¿Puedo realizar una búsqueda de DNS (nombre de host a dirección IP) usando Javascript del lado del cliente?
fuente
Error Over Quota This application is temporarily over its serving quota. Please try again later.
La mayoría de las respuestas aquí "solucionan" la necesidad de un código del lado del servidor ... Golpeando el servidor de otra persona. Lo cual es una técnica totalmente válida, a menos que realmente necesite obtener la dirección IP sin golpear un servidor.
Tradicionalmente esto no era posible sin una cierta clase de un plugin (y aún así, es probable que obtendría la equivocada dirección IP si estuviera detrás de un router NAT), pero con la llegada de WebRTC en realidad es posible hacer esto .. . Si usted está apuntando navegadores que el apoyo WebRTC (actualmente: Firefox, Chrome y Opera).
Lea la respuesta de mido para obtener detalles sobre cómo puede recuperar direcciones IP de cliente útiles utilizando WebRTC.
fuente
Puede hacer una llamada ajax a hostip.info o un servicio similar ...
Como beneficio adicional, la información de geolocalización se devuelve en la misma llamada.
fuente
O
Violín
fuente
No puedes Tendrías que preguntarle a un servidor.
fuente
No busque más
Echa un vistazo a http://www.ipify.org/
Según ellos:
Aquí hay un ejemplo de JS que funciona (en lugar de preguntarse por qué esta respuesta tiene tan pocos votos, pruébelo usted mismo para verlo en acción):
¿Demasiado perezoso para copiar / pegar? Me gusta. Aquí hay una demostración 💻
¿Demasiado perezoso para hacer clic?
:O
No tengo nada que ver con el equipo de IPify. Simplemente creo que es ridículamente genial que alguien brinde ese servicio por el bien general.
fuente
Puede usar mi servicio http://ipinfo.io para esto, que le dará la IP del cliente, el nombre de host, la información de geolocalización y el propietario de la red. Aquí hay un ejemplo simple que registra la IP:
Aquí hay un ejemplo más detallado de JSFiddle que también imprime la información de respuesta completa, para que pueda ver todos los detalles disponibles: http://jsfiddle.net/zK5FN/2/
fuente
http://ipinfo.io
de//ipinfo.io
o httpsIncluya este código en su página:
<script type="text/javascript" src="http://l2.io/ip.js"></script>
más doc aquí
fuente
Yo diría que Chad y Malta tienen una gran respuesta. Sin embargo, los suyos son complicados. Así que sugiero este código que encontré en los anuncios por complemento de país
No ajax Simplemente javascripts simples. :RE
Si vas a http://j.maxmind.com/app/geoip.js verás que contiene
Realmente aún no responde la pregunta porque
http://j.maxmind.com/app/geoip.js no contiene la IP (aunque apuesto a que usa la IP para obtener el país).
Pero es tan fácil hacer un script PhP que haga estallar algo como
Haz eso. Poner en http://yourdomain.com/yourip.php .
Entonces hazlo
La pregunta menciona específicamente NO usar script de terceros. No hay otra manera. Javascript no puede conocer su IP. Pero otros servidores a los que se puede acceder a través de JavaScript pueden funcionar igual de bien sin problemas.
fuente
Hay dos interpretaciones a esta pregunta. La mayoría de las personas interpretaron "IP del cliente" como la dirección IP pública que los servidores web ven fuera de la LAN y en Internet. Sin embargo, esta no es la dirección IP de la computadora cliente en la mayoría de los casos
Necesitaba la dirección IP real de la computadora que ejecuta el navegador que aloja mi software JavaScript (que casi siempre es una dirección IP local en una LAN que está detrás de algo de esa capa NAT).
Mido publicó una respuesta FANTÁSTICA, arriba, que parece ser la única respuesta que realmente proporcionó la dirección IP del cliente.
¡Gracias por eso, Mido!
Sin embargo, la función presentada se ejecuta de forma asincrónica. Necesito realmente USAR la dirección IP en mi código, y con una solución asincrónica, podría intentar usar la dirección IP antes de recuperarla / aprenderla / almacenarla. Tenía que poder esperar a que llegaran los resultados antes de usarlos.
Aquí hay una versión "Waitable" de la función de Mido. Espero que ayude a alguien más:
fuente
Hay un enfoque más fácil y gratuito que no le pedirá permiso a su visitante.
Consiste en enviar una solicitud POST de Ajax muy simple a http://freegeoip.net/json . Una vez que recibe la información de su ubicación, en JSON, reacciona en consecuencia actualizando la página o redirigiendo a una nueva.
Así es como envía su solicitud de información de ubicación:
fuente
Bueno, me estoy desviando de la pregunta, pero hoy tenía una necesidad similar y, aunque no pude encontrar la identificación del cliente usando Javascript, hice lo siguiente.
En el lado del servidor: -
Usando Javascript
Estoy usando ASP.Net Ajax, pero puede usar getElementById en lugar de $ get ().
Lo que sucede es que tengo un elemento div oculto en la página con la IP del usuario renderizada desde el servidor. Que en Javascript acabo de cargar ese valor.
Esto podría ser útil para algunas personas con un requisito similar como el tuyo (como yo, aunque no lo había resuelto).
¡Salud!
fuente
<script>var uip='<%= Request.UserHostAddress %>';</script>
?Con el uso de Smart-IP.net Geo-IP API . Por ejemplo, usando jQuery:
fuente
En general, no es posible a menos que use algún tipo de servicio externo.
fuente
Obtenga su IP con jQuery
Puede obtener su dirección IP pública con una línea de JS? Hay un servicio gratuito que ofrece esto para usted y una solicitud de obtención es todo lo que necesita hacer:
Para que funcione el fragmento anterior, su navegador tendrá que admitir CORS (intercambio de solicitudes de origen cruzado). De lo contrario, se lanzaría una excepción de seguridad. En navegadores antiguos, puede usar esta versión, que usa una solicitud JSON-P:
fuente
Puede usar la biblioteca javascript userinfo.io .
También puede usar requirejs para cargar el script.
Le dará la dirección IP de su visitante, así como algunos datos sobre su ubicación (país, ciudad, etc.). Se basa en la base de datos maxmind geoip.
Descargo de responsabilidad: escribí esta biblioteca
fuente
Javascript / jQuery obtiene la dirección IP y la ubicación del cliente (país, ciudad)
Solo necesita incrustar una etiqueta con el enlace "src" al servidor. El servidor devolverá "codehelper_ip" como un objeto / JSON, y puede usarlo de inmediato.
Más información en Javascript Detect Real IP Address Plus Country
Si está utilizando jQUery, puede probar:
Le mostrará más información sobre el objeto devuelto.
Si desea la función de devolución de llamada, intente esto:
fuente
language
atributo, usetype="text/javascript"
en su lugar, más en MDNEl servicio de devolución de llamada de Appspot.com no está disponible. ipinfo.io parece estar funcionando.
Hice un paso adicional y recuperé toda la información geográfica usando AngularJS. (Gracias a Ricardo) Compruébalo.
Página de trabajo aquí: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
fuente
Si incluye un archivo de todas formas, puede hacer un simple ajax obtener:
Y
ajax.getIp.php
sería esto:fuente
Realmente me gusta
api.ipify.org
porque es compatible con HTTP y HTTPS.Estos son algunos ejemplos de cómo obtener la IP
api.ipify.org
utilizando jQuery.Formato JSON sobre HTTPS
Formato JSON sobre HTTP
Formato de texto sobre HTTPS
Si no lo desea en JSON, también hay una respuesta de texto sin formato sobre HTTPS
Formato de texto sobre HTTP
Y también hay una respuesta de texto sin formato sobre HTTP
fuente
Utiliza ipdata.co .
¡La API también proporciona datos de geolocalización y tiene 10 puntos finales globales, cada uno capaz de manejar> 800M solicitudes por día!
fuente
Realmente no hay una manera confiable de obtener la dirección IP de la computadora cliente.
Esto pasa por algunas de las posibilidades. El código que usa Java se romperá si el usuario tiene múltiples interfaces.
http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html
Al mirar las otras respuestas aquí, parece que es posible que desee obtener la dirección IP pública del cliente, que probablemente sea la dirección del enrutador que están utilizando para conectarse a Internet. Muchas de las otras respuestas aquí hablan de eso. Recomendaría crear y alojar su propia página del lado del servidor para recibir la solicitud y responder con la dirección IP en lugar de depender del servicio de otra persona que pueda o no continuar funcionando.
fuente
Voy a ofrecer un método que uso mucho cuando quiero almacenar información en la página html, y quiero que mi javascript lea la información sin tener que pasar parámetros al javascript. Esto es especialmente útil cuando su script se hace referencia externamente, en lugar de en línea.
Sin embargo, no cumple con el criterio de "no script del lado del servidor". Pero si puede incluir secuencias de comandos del lado del servidor en su html, haga lo siguiente:
Cree elementos de etiqueta ocultos en la parte inferior de su página html, justo encima de la etiqueta del cuerpo final.
Su etiqueta se verá así:
Asegúrese de hacer una clase llamada
hiddenlabel
y establecer elvisibility:hidden
para que nadie vea realmente la etiqueta. Puede almacenar muchas cosas de esta manera, en etiquetas ocultas.Ahora, en su javascript, para recuperar la información almacenada en la etiqueta (en este caso, la dirección IP del cliente), puede hacer esto:
Ahora su variable "ip" es igual a la dirección ip. Ahora puede pasar la ip a su solicitud de API.
* EDITAR 2 AÑOS DESPUÉS * Dos mejoras menores:
Usualmente uso este método, pero llamo a la etiqueta
class="data"
, porque, de hecho, es una forma de almacenar datos. El nombre de la clase "hiddenlabel" es una especie de nombre estúpido.La segunda modificación está en la hoja de estilo, en lugar de
visibility:hidden
:... es la mejor manera de hacerlo.
fuente
fuente
Pruebe esto: http://httpbin.org/ip (o https://httpbin.org/ip )
Ejemplo con https:
Fuente: http://httpbin.org/
fuente
En primer lugar, la respuesta real : no es posible utilizar código ejecutado exclusivamente del lado del cliente para averiguar su propia dirección IP.
Sin embargo, puede hacer un GET hacia https://api.muctool.de/whois y recibir algo como obtener la dirección IP de un cliente
fuente
Puede hacer esto completamente del lado del cliente y principalmente en JavaScript utilizando un objeto Flash al que js pueda llamar. Flash puede acceder a la dirección IP de la máquina local, lo que puede no ser muy útil.
fuente
data.host
es la dirección ip Simplemente llame a esto desde su navegador.http://smart-ip.net/geoip-json?callback=?
[Sin comillas] y obtenga la ip.fuente