Eu preciso recuperar de alguma forma o endereço IP do cliente usando JavaScript; nenhum código do lado do servidor, nem mesmo SSI.
No entanto, não sou contra o uso de um script / serviço gratuito de terceiros.
fonte
Eu preciso recuperar de alguma forma o endereço IP do cliente usando JavaScript; nenhum código do lado do servidor, nem mesmo SSI.
No entanto, não sou contra o uso de um script / serviço gratuito de terceiros.
Eu usaria um serviço da web que pode retornar JSON (junto com o jQuery para simplificar as coisas). Abaixo estão todos os serviços de pesquisa de IP ativos gratuitos que eu encontrei e as informações que eles retornam. Se você souber mais, adicione um comentário e atualizarei esta resposta.
Experimente: 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)
})
Devoluções:
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
Limitações:
Experimente: http://api.db-ip.com/addrinfo?api_key= < sua chave api > & addr = < endereço IP >
Devoluções:
{
"address": "116.12.250.1",
"country": "SG",
"stateprov": "Central Singapore",
"city": "Singapore"
}
Limitações:
Experimente: http://gd.geobytes.com/GetCityDetails
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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"
}
Limitações:
Experimente: https://json.geoiplookup.io/api
$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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
}
Limitações:
Experimente: http://www.geoplugin.net/json.gp
$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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
}
Limitações:
Experimente: https://api.hackertarget.com/geoip/?q= < endereço IP >
Devoluções:
IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797
Limitações:
Experimente: https://ipapi.co/json/
$.getJSON('https://ipapi.co/json/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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"
}
Limitações:
Experimente: http://ip-api.com/json
$.getJSON('http://ip-api.com/json?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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": ""
}
Limitações:
Experimente: https://api.ipdata.co
$.getJSON('https://api.ipdata.co', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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
}
}
Limitações:
Experimente: https://ipfind.co/me?auth= < sua chave da API >
$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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"
]
}
Limitações:
Experimente: https://api.ipgeolocation.io/ipgeo?apiKey= < sua chave da API >
$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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"
}
}
Limitações:
Experimente: https://api.ipify.org/?format=json
$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"ip": "116.12.250.1"
}
Limitações:
Experimente: https://api.ipinfodb.com/v3/ip-city/?key= < sua chave da API > & 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));
});
Devoluções:
{
"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"
}
Limitações:
Experimente: https://ipinfo.io/json
$.getJSON('https://ipinfo.io/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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"
}
Limitações:
Experimente: https://api.ipregistry.co/?key= < sua chave da API >
$.getJSON('https://api.ipregistry.co/?key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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
}
}
Limitações:
Experimente: http://api.ipstack.com/ < endereço IP >? Access_key = <sua chave api>
$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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
}
}
Limitações:
Experimente: https://jsonip.com
$.getJSON('https://jsonip.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"ip": "116.12.250.1",
"about": "https://jsonip.com/about",
"Pro!": "http://getjsonip.com",
"Get Notifications": "https://jsonip.com/notify"
}
Limitações:
Experimente: http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"ip": "116.12.250.1"
}
Limitações:
Experimente: https://geoip.nekudo.com/api
$.getJSON('https://geoip.nekudo.com/api', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Devoluções:
{
"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"
}
Limitações:
Lembre-se de que, como todos esses serviços são gratuitos, sua milhagem pode variar em termos de cota e tempo de atividade excedentes, e quem sabe quando / se eles serão retirados da estrada ( anexo A: Telize ). A maioria desses serviços também oferece uma camada paga, caso você queira mais recursos, como suporte a SSL.
Além disso, como skobaljic observou nos comentários abaixo, as cotas de solicitação são principalmente acadêmicas, pois isso está acontecendo no lado do cliente e a maioria dos usuários finais nunca excederá a cota.
ATUALIZAÇÕES
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });
Atualização final
Essa solução não funcionaria mais porque os navegadores estão corrigindo o vazamento do webrtc: para obter mais informações sobre isso, leia esta outra pergunta: RTCIceCandidate não retorna mais o IP
Atualização : eu sempre quis fazer uma versão min / uglificada do código, então aqui está um código ES6 Promise:
Nota: Este novo código minificado retornaria apenas um único IP se você quiser todos os IPs do usuário (que podem ser mais dependendo da rede dele), use o código original ...
Graças ao WebRTC , é muito fácil obter IP local nos navegadores suportados pelo WebRTC (pelo menos por enquanto). Modifiquei o código-fonte, reduzi as linhas, não fiz solicitações de atordoamento, já que você deseja apenas o IP local, não o IP público, o código abaixo funciona nos mais recentes Firefox e Chrome, basta executar o snippet e verificar por si mesmo:
o que está acontecendo aqui é que estamos criando uma conexão fictícia entre pares e, para que o ponto remoto entre em contato conosco, geralmente trocamos candidatos de gelo entre si. E lendo os candidatos a gelo (da descrição da sessão local e do onIceCandidateEvent), podemos dizer o IP do usuário.
de onde peguei o código -> Source
fonte
Você pode, retransmitindo-o via servidor com JSONP
E enquanto pesquisava no Google, encontrei aqui no SO. Posso executar uma pesquisa de DNS (nome do host para endereço IP) usando Javascript no cliente?
fonte
Error Over Quota This application is temporarily over its serving quota. Please try again later.
A maioria das respostas aqui "soluciona" a necessidade de código do lado do servidor ... Atingindo o servidor de outra pessoa. Essa é uma técnica totalmente válida, a menos que você realmente precise obter o endereço IP sem precisar acessar um servidor.
Tradicionalmente, isso não era possível sem algum tipo de plug-in (e mesmo assim, você provavelmente obteria o endereço IP errado se estivesse atrás de um roteador NAT), mas com o advento do WebRTC é realmente possível fazer isso. . Se você está alvejando navegadores que suportam WebRTC (atualmente: Firefox, Chrome e Opera).
Leia a resposta da mido para obter detalhes sobre como recuperar endereços IP de clientes úteis usando o WebRTC.
fonte
Você pode fazer uma chamada ajax para hostip.info ou um serviço semelhante ...
Como bônus, as informações de localização geográfica são retornadas na mesma chamada.
fonte
OU
Violino
fonte
Você não pode. Você teria que perguntar a um servidor.
fonte
Não procure mais
Confira http://www.ipify.org/
De acordo com eles:
Aqui está um exemplo de JS funcional (em vez de se perguntar por que essa resposta tem tão poucos votos, tente você mesmo vê-la em ação):
Com preguiça de copiar / colar? Eu gosto disso. Aqui está uma demonstração
Com preguiça de clicar?
:O
Não tenho nada a ver com a equipe do IPify. Eu acho ridiculamente legal alguém oferecer esse serviço para o bem geral.
fonte
Você pode usar meu serviço http://ipinfo.io para isso, que fornecerá o IP do cliente, nome do host, informações de localização geográfica e proprietário da rede. Aqui está um exemplo simples que registra o IP:
Aqui está um exemplo mais detalhado do JSFiddle que também imprime as informações completas da resposta, para que você possa ver todos os detalhes disponíveis: http://jsfiddle.net/zK5FN/2/
fonte
http://ipinfo.io
para//ipinfo.io
ou https #Inclua este código na sua página:
<script type="text/javascript" src="http://l2.io/ip.js"></script>
mais doc aqui
fonte
Eu diria que Chade e Malta têm uma ótima resposta. No entanto, os deles são complicados. Então, sugiro esse código que encontrei nos anúncios por plug-in de país
Sem ajax. Apenas javascripts simples. : D
Se você acessar http://j.maxmind.com/app/geoip.js , verá que ele contém
Ainda não responde à pergunta porque
http://j.maxmind.com/app/geoip.js não contém o IP (embora aposto que ele usa o IP para obter o país).
Mas é tão fácil criar um script PhP que aparece algo como
Faça aquilo. Coloque http://yourdomain.com/yourip.php .
Então faça
A pergunta menciona especificamente NÃO para usar scripts de terceiros. Não há outro caminho. Javascript não pode saber o seu IP. Mas outros servidores que podem ser acessados por javascript podem funcionar da mesma maneira sem problemas.
fonte
Existem duas interpretações para essa pergunta. A maioria das pessoas interpretou "IP do cliente" como o endereço IP público que o servidor da Web vê fora da LAN e fora da Internet. Este não é o endereço IP do computador cliente na maioria dos casos, embora
Eu precisava do endereço IP real do computador que está executando o navegador que hospeda o meu software JavaScript (que quase sempre é um endereço IP local em uma LAN que está por trás de algo nessa camada NAT).
Mido postou uma resposta FANTÁSTICA, acima, que parece ser a única resposta que realmente forneceu o endereço IP do cliente.
Obrigado por isso, Mido!
No entanto, a função apresentada é executada de forma assíncrona. Preciso realmente USAR o endereço IP no meu código e, com uma solução assíncrona, posso tentar usar o endereço IP antes que ele seja recuperado / aprendido / armazenado. Eu precisava aguardar os resultados para chegar antes de usá-los.
Aqui está uma versão "Waitable" da função do Mido. Espero que ajude outra pessoa:
fonte
Existe uma abordagem mais fácil e gratuita que não solicita permissão ao visitante.
Consiste em enviar uma solicitação muito simples do Ajax POST para http://freegeoip.net/json . Depois de receber suas informações de localização, em JSON, você reage de acordo atualizando a página ou redirecionando para uma nova.
Aqui está como você envia sua solicitação de informações de localização:
fonte
Bem, estou me desviando da pergunta, mas hoje tive uma necessidade semelhante e, embora não tenha encontrado o ID do cliente usando Javascript, fiz o seguinte.
No lado do servidor: -
Usando Javascript
Estou usando o ASP.Net Ajax, mas você pode usar getElementById em vez de $ get ().
O que está acontecendo é que eu tenho um elemento div oculto na página com o IP do usuário processado no servidor. Do que em Javascript, apenas carrego esse valor.
Isso pode ser útil para algumas pessoas com requisitos semelhantes aos seus (como eu, enquanto eu não tinha descoberto isso).
Felicidades!
fonte
<script>var uip='<%= Request.UserHostAddress %>';</script>
?Com o uso da API Smart-IP.net Geo-IP . Por exemplo, usando jQuery:
fonte
Geralmente, não é possível, a menos que você use algum tipo de serviço externo.
fonte
Obtenha seu IP com jQuery
você pode obter seu endereço IP público com uma linha de JS? Há um serviço gratuito que oferece isso para você e uma solicitação de obtenção é tudo o que você precisa fazer:
Para que o snippet acima funcione, seu navegador precisará oferecer suporte ao CORS (compartilhamento de solicitação entre origens). Caso contrário, uma exceção de segurança seria lançada. Em navegadores antigos, você pode usar esta versão, que usa uma solicitação JSON-P:
fonte
Você pode usar a biblioteca javascript userinfo.io .
Você também pode usar requirejs para carregar o script.
Ele fornecerá o endereço IP do seu visitante, bem como alguns dados sobre sua localização (país, cidade etc.). É baseado no banco de dados maxmind geoip.
Isenção de responsabilidade: escrevi esta biblioteca
fonte
Javascript / jQuery obtém o endereço IP e a localização do cliente (país, cidade)
Você só precisa incorporar uma tag com o link "src" no servidor. O servidor retornará "codehelper_ip" como um Object / JSON, e você poderá usá-lo imediatamente.
Mais informações em Javascript Detect Real IP Address Plus Country
Se você estiver usando jQUery, poderá tentar:
Ele mostrará mais informações sobre o objeto retornado.
Se você deseja a função de retorno de chamada, tente o seguinte:
fonte
language
atributo, usetype="text/javascript"
em vez disso, mais em MDNO serviço de retorno de chamada do Appspot.com não está disponível. O ipinfo.io parece estar funcionando.
Fiz uma etapa extra e recuperei todas as informações geográficas usando o AngularJS. (Obrigado ao Ricardo) Confira.
Página de trabalho aqui: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
fonte
Se você estiver incluindo um arquivo de qualquer maneira, poderá fazer um simples ajax obter:
E
ajax.getIp.php
seria isso:fonte
Eu realmente gosto
api.ipify.org
porque ele suporta HTTP e HTTPS.Aqui estão alguns exemplos de como obter o IP usando
api.ipify.org
usando o jQuery.Formato JSON sobre HTTPS
Formato JSON sobre HTTP
Formato de texto em HTTPS
Se você não quiser em JSON, também há uma resposta em texto sem formatação sobre HTTPS
Formato de texto sobre HTTP
E também há uma resposta em texto sem formatação sobre HTTP
fonte
Use ipdata.co .
A API também fornece dados de localização geográfica e possui 10 pontos de extremidade globais, cada um capaz de lidar com mais de 800 milhões de solicitações por dia!
fonte
Não existe realmente uma maneira confiável de obter o endereço IP do computador cliente.
Isso passa por algumas das possibilidades. O código que usa Java será interrompido se o usuário tiver várias interfaces.
http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html
Observando as outras respostas aqui, parece que você deseja obter o endereço IP público do cliente, que provavelmente é o endereço do roteador que ele está usando para se conectar à Internet. Muitas das outras respostas aqui falam sobre isso. Eu recomendaria criar e hospedar sua própria página do lado do servidor para receber a solicitação e responder com o endereço IP em vez de depender do serviço de outra pessoa que pode ou não continuar funcionando.
fonte
Vou oferecer um método que uso muito quando quero armazenar informações na página html e quero que meu javascript leia informações sem precisar passar parâmetros para o javascript. Isso é especialmente útil quando seu script é referenciado externamente, em vez de embutido.
Porém, ele não atende ao critério de "nenhum script do lado do servidor". Mas se você pode incluir scripts do lado do servidor em seu html, faça o seguinte:
Crie elementos de etiqueta ocultos na parte inferior da sua página html, logo acima da etiqueta do corpo final.
Seu rótulo ficará assim:
Certifique-se de criar uma classe chamada
hiddenlabel
e definir o nomevisibility:hidden
para que ninguém realmente veja o rótulo. Você pode armazenar muitas coisas dessa maneira, em rótulos ocultos.Agora, no seu javascript, para recuperar as informações armazenadas no rótulo (neste caso, o endereço IP do cliente), você pode fazer o seguinte:
Agora sua variável "ip" é igual ao endereço IP. Agora você pode passar o ip para sua solicitação de API.
* EDITAR 2 ANOS DEPOIS * Dois pequenos refinamentos:
Eu uso rotineiramente esse método, mas chamo o rótulo
class="data"
, porque, de fato, é uma maneira de armazenar dados. O nome da classe "hiddenlabel" é meio que um nome estúpido.A segunda modificação está na folha de estilos, em vez de
visibility:hidden
:... é a melhor maneira de fazê-lo.
fonte
fonte
Tente isso: http://httpbin.org/ip (ou https://httpbin.org/ip )
Exemplo com https:
Fonte: http://httpbin.org/
fonte
Antes de mais nada, a resposta real : não é possível usar código executado puramente do lado do cliente para descobrir seu próprio endereço IP.
No entanto, você pode simplesmente fazer um GET em https://api.muctool.de/whois e receber algo como obter o endereço IP de um cliente
fonte
Você pode fazer isso inteiramente do lado do cliente e principalmente em JavaScript usando um objeto Flash que os js podem chamar. O Flash pode acessar o endereço IP da máquina local, o que pode não ser muito útil.
fonte
data.host
é o endereço IP. Basta ligar para isso no seu navegador.http://smart-ip.net/geoip-json?callback=?
[Sem aspas] e obtenha o ip.fonte