Risposte:
Vorrei utilizzare un servizio Web che può restituire JSON (insieme a jQuery per semplificare le cose). Di seguito sono riportati tutti i servizi di ricerca IP attivi gratuiti che ho trovato e le informazioni che restituiscono. Se ne conosci altri, ti preghiamo di aggiungere un commento e aggiornerò questa risposta.
Provalo: 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)
})
Ritorna:
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
limitazioni:
Provalo: http://api.db-ip.com/addrinfo?api_key= <la tua chiave api > & addr = < indirizzo ip >
Ritorna:
{
"address": "116.12.250.1",
"country": "SG",
"stateprov": "Central Singapore",
"city": "Singapore"
}
limitazioni:
Provalo: http://gd.geobytes.com/GetCityDetails
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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"
}
limitazioni:
Provalo: https://json.geoiplookup.io/api
$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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
}
limitazioni:
Provalo: http://www.geoplugin.net/json.gp
$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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
}
limitazioni:
Provalo: https://api.hackertarget.com/geoip/?q= < indirizzo ip >
Ritorna:
IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797
limitazioni:
Provalo: https://ipapi.co/json/
$.getJSON('https://ipapi.co/json/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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"
}
limitazioni:
Provalo: http://ip-api.com/json
$.getJSON('http://ip-api.com/json?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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": ""
}
limitazioni:
Provalo: https://api.ipdata.co
$.getJSON('https://api.ipdata.co', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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
}
}
limitazioni:
Provalo: https://ipfind.co/me?auth= <la tua chiave API >
$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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"
]
}
limitazioni:
Provalo: https://api.ipgeolocation.io/ipgeo?apiKey= <la tua chiave API >
$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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"
}
}
limitazioni:
Provalo: https://api.ipify.org/?format=json
$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"ip": "116.12.250.1"
}
limitazioni:
Provalo: https://api.ipinfodb.com/v3/ip-city/?key= <la tua chiave 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));
});
Ritorna:
{
"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"
}
limitazioni:
Provalo: https://ipinfo.io/json
$.getJSON('https://ipinfo.io/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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"
}
limitazioni:
Provalo: https://api.ipregistry.co/?key= <la tua chiave api >
$.getJSON('https://api.ipregistry.co/?key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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
}
}
limitazioni:
Provalo: http://api.ipstack.com/ < indirizzo ip >? Access_key = <la tua chiave api>
$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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
}
}
limitazioni:
Provalo: https://jsonip.com
$.getJSON('https://jsonip.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"ip": "116.12.250.1",
"about": "https://jsonip.com/about",
"Pro!": "http://getjsonip.com",
"Get Notifications": "https://jsonip.com/notify"
}
limitazioni:
Provalo: http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"ip": "116.12.250.1"
}
limitazioni:
Provalo: https://geoip.nekudo.com/api
$.getJSON('https://geoip.nekudo.com/api', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Ritorna:
{
"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"
}
limitazioni:
Tieni presente che poiché questi sono tutti servizi gratuiti, il tuo chilometraggio può variare in termini di superamento della quota e del tempo di attività e chissà quando / se verranno portati offline lungo la strada (figura A: Telize ). La maggior parte di questi servizi offre anche un livello a pagamento nel caso in cui si desideri più funzionalità come il supporto SSL.
Inoltre, come notato da skobaljic nei commenti seguenti, le quote di richiesta sono per lo più accademiche poiché ciò accade sul lato client e la maggior parte degli utenti finali non supererà mai la quota.
AGGIORNAMENTI
Aggiornamento finale
Questa soluzione non funzionerebbe più perché i browser stanno riparando la perdita di webrtc: per maggiori informazioni a riguardo leggi questa altra domanda: RTCIceCandidate non restituisce più IP
Aggiornamento : ho sempre voluto creare una versione min / ugellata del codice, quindi ecco un codice Promessa ES6:
var findIP = new Promise(r=>{var w=window,a=new (w.RTCPeerConnection||w.mozRTCPeerConnection||w.webkitRTCPeerConnection)({iceServers:[]}),b=()=>{};a.createDataChannel("");a.createOffer(c=>a.setLocalDescription(c,b,b),b);a.onicecandidate=c=>{try{c.candidate.candidate.match(/([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g).forEach(r)}catch(e){}}})
/*Usage example*/
findIP.then(ip => document.write('your ip: ', ip)).catch(e => console.error(e))
Nota: questo nuovo codice minimizzato restituirebbe un singolo IP se si desidera tutti gli IP dell'utente (che potrebbe dipendere maggiormente dalla sua rete), utilizzare il codice originale ...
grazie a WebRTC , è molto semplice ottenere l'IP locale nei browser supportati da WebRTC (almeno per ora). Ho modificato il codice sorgente, ridotto le righe, non ho fatto richieste di stordimento poiché vuoi solo IP locale, non IP pubblico, il codice seguente funziona negli ultimi Firefox e Chrome, esegui solo lo snippet e controlla tu stesso:
function findIP(onNewIP) { // onNewIp - your listener function for new IPs
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
var pc = new myPeerConnection({iceServers: []}),
noop = function() {},
localIPs = {},
ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
key;
function ipIterate(ip) {
if (!localIPs[ip]) onNewIP(ip);
localIPs[ip] = true;
}
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(function(sdp) {
sdp.sdp.split('\n').forEach(function(line) {
if (line.indexOf('candidate') < 0) return;
line.match(ipRegex).forEach(ipIterate);
});
pc.setLocalDescription(sdp, noop, noop);
}, noop); // create offer and set local description
pc.onicecandidate = function(ice) { //listen for candidate events
if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
};
}
var ul = document.createElement('ul');
ul.textContent = 'Your IPs are: '
document.body.appendChild(ul);
function addIP(ip) {
console.log('got ip: ', ip);
var li = document.createElement('li');
li.textContent = ip;
ul.appendChild(li);
}
findIP(addIP);
<h1> Demo retrieving Client IP using WebRTC </h1>
quello che sta succedendo qui è che stiamo creando una connessione fittizia tra pari, e per il peer remoto di contattarci, generalmente scambiamo candidati sul ghiaccio tra di noi. E leggendo i candidati sul ghiaccio (dalla descrizione della sessione locale e onIceCandidateEvent) possiamo dire l'IP dell'utente.
da cui ho preso il codice da -> Fonte
È possibile, inoltrandolo tramite il lato server con JSONP
E mentre cerco su Google di trovarne uno, lo trovo qui su SO Posso eseguire una ricerca DNS (nome host su indirizzo IP) usando Javascript sul lato client?
<script type="application/javascript">
function getip(json){
alert(json.ip); // alerts the ip address
}
</script>
<script type="application/javascript" src="http://www.telize.com/jsonip?callback=getip"></script>
Nota: l'API telize.com si è definitivamente chiusa dal 15 novembre 2015 .
Error Over Quota This application is temporarily over its serving quota. Please try again later.
La maggior parte delle risposte qui "aggira" la necessità di un codice sul lato server colpendo il server di qualcun altro. Che è una tecnica totalmente valida, a meno che tu non abbia effettivamente bisogno di ottenere l'indirizzo IP senza colpire un server.
Tradizionalmente questo non era possibile senza una sorta di plug-in (e anche allora, si otterrebbe probabilmente un indirizzo IP errato se si fosse dietro un router NAT), ma con l'avvento di WebRTC è effettivamente possibile farlo. . Se ci si rivolge browser che supportano WebRTC (attualmente: Firefox, Chrome e Opera).
Leggere la risposta di mido per i dettagli su come recuperare indirizzi IP client utili utilizzando WebRTC.
Puoi fare una chiamata Ajax a hostip.info o un servizio simile ...
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;
}
Come bonus, le informazioni di geolocalizzazione vengono restituite nella stessa chiamata.
Prova questo
$.get("http://ipinfo.io", function(response) {
alert(response.ip);
}, "jsonp");
O
$(document).ready(function () {
$.getJSON("http://jsonip.com/?callback=?", function (data) {
console.log(data);
alert(data.ip);
});
});
Non puoi. Dovresti chiedere a un server.
Dai un'occhiata a http://www.ipify.org/
In accordo con loro:
- Puoi usarlo senza limiti (anche se stai facendo milioni di richieste al minuto).
- ipify è completamente open source (controlla il repository GitHub ).
Ecco un esempio di JS funzionante (invece di chiederti perché questa risposta abbia così pochi voti, provalo tu stesso per vederlo in azione):
<script>
function getIP(json) {
alert("My public IP address is: " + json.ip);
}
</script>
<script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
Troppo pigro per copiare / incollare? Mi piace. Ecco una 💻 demo
Troppo pigro per fare clic? :O
Nota : Disattiva Adblock Plus / uBlock & co prima di eseguire la demo .. altrimenti non funzionerà.
Non ho nulla a che fare con il team di IPify. Penso solo che sia ridicolmente bello che qualcuno possa fornire un tale servizio per il bene generale.
A questo scopo puoi utilizzare il mio servizio http://ipinfo.io , che ti fornirà l'IP del client, il nome host, le informazioni sulla geolocalizzazione e il proprietario della rete. Ecco un semplice esempio che registra l'IP:
$.get("http://ipinfo.io", function(response) {
console.log(response.ip);
}, "jsonp");
Ecco un esempio JSFiddle più dettagliato che stampa anche le informazioni complete sulla risposta, in modo da poter vedere tutti i dettagli disponibili: http://jsfiddle.net/zK5FN/2/
http://ipinfo.io
passa a //ipinfo.io
o https
Includi questo codice nella tua pagina: <script type="text/javascript" src="http://l2.io/ip.js"></script>
più doc qui
Direi che Chad e Malta hanno un'ottima risposta. Tuttavia, i loro sono complicati. Quindi suggerisco questo codice che ho trovato dagli annunci per plugin del paese
<script>
<script language="javascript" src="http://j.maxmind.com/app/geoip.js"></script>
<script language="javascript">
mmjsCountryCode = geoip_country_code();
mmjsCountryName = geoip_country_name();
</script>
No ajax. Solo semplici javascript. : D
Se vai su http://j.maxmind.com/app/geoip.js vedrai che contiene
function geoip_country_code() { return 'ID'; }
function geoip_country_name() { return 'Indonesia'; }
function geoip_city() { return 'Jakarta'; }
function geoip_region() { return '04'; }
function geoip_region_name() { return 'Jakarta Raya'; }
function geoip_latitude() { return '-6.1744'; }
function geoip_longitude() { return '106.8294'; }
function geoip_postal_code() { return ''; }
function geoip_area_code() { return ''; }
function geoip_metro_code() { return ''; }
In realtà non risponde ancora alla domanda perché
http://j.maxmind.com/app/geoip.js non contiene l'IP (anche se scommetto che utilizza l'IP per ottenere il paese).
Ma è così facile creare uno script PhP che fa apparire qualcosa di simile
function visitorsIP() { return '123.123.123.123'; }
Fallo. Metti su http://yourdomain.com/yourip.php .
Quindi fa
<script language="javascript" src="http://yourdomain.com/yourip.php"></script>
La domanda menziona specificamente NON usare script di terze parti. Non c'è altro modo. Javascript non può conoscere il tuo IP. Ma altri server a cui è possibile accedere tramite JavaScript possono funzionare altrettanto bene senza problemi.
Ci sono due interpretazioni a questa domanda. La maggior parte delle persone ha interpretato "IP client" per indicare l'indirizzo IP pubblico che il server Web vede all'esterno della LAN e su Internet. Tuttavia, questo non è l'indirizzo IP del computer client nella maggior parte dei casi
Avevo bisogno del vero indirizzo IP del computer che esegue il browser che ospita il mio software JavaScript (che è quasi sempre un indirizzo IP locale su una LAN che si trova dietro qualcosa di quel livello NAT).
Mido ha pubblicato una risposta FANTASTICA, sopra, che sembra essere l'unica risposta che ha davvero fornito l'indirizzo IP del client.
Grazie per quello, Mido!
Tuttavia, la funzione presentata viene eseguita in modo asincrono. Devo effettivamente USARE l'indirizzo IP nel mio codice e, con una soluzione asincrona, potrei provare a usare l'indirizzo IP prima che venga recuperato / appreso / memorizzato. Ho dovuto essere in grado di attendere che i risultati arrivassero prima di usarli.
Ecco una versione "Waitable" della funzione di Mido. Spero che aiuti qualcun altro:
function findIP(onNewIP) { // onNewIp - your listener function for new IPs
var promise = new Promise(function (resolve, reject) {
try {
var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
var pc = new myPeerConnection({ iceServers: [] }),
noop = function () { },
localIPs = {},
ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
key;
function ipIterate(ip) {
if (!localIPs[ip]) onNewIP(ip);
localIPs[ip] = true;
}
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(function (sdp) {
sdp.sdp.split('\n').forEach(function (line) {
if (line.indexOf('candidate') < 0) return;
line.match(ipRegex).forEach(ipIterate);
});
pc.setLocalDescription(sdp, noop, noop);
}, noop); // create offer and set local description
pc.onicecandidate = function (ice) { //listen for candidate events
if (ice && ice.candidate && ice.candidate.candidate && ice.candidate.candidate.match(ipRegex)) {
ice.candidate.candidate.match(ipRegex).forEach(ipIterate);
}
resolve("FindIPsDone");
return;
};
}
catch (ex) {
reject(Error(ex));
}
});// New Promise(...{ ... });
return promise;
};
//This is the callback that gets run for each IP address found
function foundNewIP(ip) {
if (typeof window.ipAddress === 'undefined')
{
window.ipAddress = ip;
}
else
{
window.ipAddress += " - " + ip;
}
}
//This is How to use the Waitable findIP function, and react to the
//results arriving
var ipWaitObject = findIP(foundNewIP); // Puts found IP(s) in window.ipAddress
ipWaitObject.then(
function (result) {
alert ("IP(s) Found. Result: '" + result + "'. You can use them now: " + window.ipAddress)
},
function (err) {
alert ("IP(s) NOT Found. FAILED! " + err)
}
);
<h1>Demo "Waitable" Client IP Retrieval using WebRTC </h1>
Esiste un approccio più semplice e gratuito che non richiede alcuna autorizzazione al tuo visitatore.
Consiste nell'inviare una richiesta POST Ajax molto semplice a http://freegeoip.net/json . Una volta ricevute le informazioni sulla tua posizione, in JSON, reagisci di conseguenza aggiornando la pagina o reindirizzando a una nuova.
Ecco come inviare la richiesta di informazioni sulla posizione:
jQuery.ajax( {
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
console.log(location)
}
} );
Bene, sto divagando dalla domanda, ma oggi avevo un bisogno simile e sebbene non riuscissi a trovare l'ID dal client usando Javascript, ho fatto quanto segue.
Sul lato server: -
<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>
Utilizzando Javascript
var ip = $get("uip").innerHTML;
Sto usando ASP.Net Ajax, ma puoi usare getElementById invece di $ get ().
Quello che sta succedendo è che ho un elemento div nascosto nella pagina con l'IP dell'utente reso dal server. Che in Javascript ho appena caricato quel valore.
Questo potrebbe essere utile per alcune persone con requisiti simili ai tuoi (come me mentre non lo avevo capito).
Saluti!
<script>var uip='<%= Request.UserHostAddress %>';</script>
?
Con l'utilizzo dell'API Geo-IP di Smart-IP.net . Ad esempio, usando jQuery:
$(document).ready( function() {
$.getJSON( "http://smart-ip.net/geoip-json?callback=?",
function(data){
alert( data.host);
}
);
});
Non è possibile in generale se non si utilizza un qualche tipo di servizio esterno.
Ottieni il tuo IP con jQuery
puoi ottenere il tuo indirizzo IP pubblico con una riga di JS? C'è un servizio gratuito che ti offre questo e una richiesta di ottenere è tutto ciò che devi fare:
$.get('http://jsonip.com/', function(r){ console.log(r.ip); });
Perché lo snippet sopra riportato funzioni, il tuo browser dovrà supportare CORS (condivisione delle richieste tra le origini). Altrimenti verrebbe generata un'eccezione di sicurezza. Nei browser meno recenti, è possibile utilizzare questa versione, che utilizza una richiesta JSON-P:
$.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });
È possibile utilizzare la libreria javascript userinfo.io .
<script type="text/javascript" src="userinfo.0.0.1.min.js"></script>
UserInfo.getInfo(function(data) {
alert(data.ip_address);
}, function(err) {
// Do something with the error
});
Puoi anche utilizzare requestjs per caricare lo script.
Ti fornirà l'indirizzo IP del tuo visitatore, nonché alcuni dati sulla sua posizione (paese, città, ecc.). Si basa sul database geoip maxmind.
Disclaimer: ho scritto questa libreria
Javascript / jQuery ottiene l'indirizzo IP e la posizione del cliente (Paese, Città)
Devi solo incorporare un tag con il link "src" al server. Il server restituirà "codehelper_ip" come un oggetto / JSON e puoi usarlo immediatamente.
// First, embed this script in your head or at bottom of the page.
<script language="Javascript" src="http://www.codehelper.io/api/ips/?js"></script>
// You can use it
<script language="Javascript">
alert(codehelper_ip.IP);
alert(codehelper_ip.Country);
</script>
Maggiori informazioni su Javascript Rilevano l'indirizzo IP reale più il Paese
Se stai usando jQUery, puoi provare:
console.log(codehelper_ip);
Ti mostrerà ulteriori informazioni sull'oggetto restituito.
Se si desidera la funzione di richiamata, provare questo:
// First, embed this script in your head or at bottom of the page.
<script language="Javascript" src="http://www.codehelper.io/api/ips/?callback=yourcallback"></script>
// You can use it
<script language="Javascript">
function yourcallback(json) {
alert(json.IP);
}
</script>
Il servizio di callback di Appspot.com non è disponibile. ipinfo.io sembra funzionare.
Ho fatto un passo in più e ho recuperato tutte le informazioni geografiche usando AngularJS. (Grazie a Ricardo) Dai un'occhiata.
<div ng-controller="geoCtrl">
<p ng-bind="ip"></p>
<p ng-bind="hostname"></p>
<p ng-bind="loc"></p>
<p ng-bind="org"></p>
<p ng-bind="city"></p>
<p ng-bind="region"></p>
<p ng-bind="country"></p>
<p ng-bind="phone"></p>
</div>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://code.angularjs.org/1.2.12/angular.min.js"></script>
<script src="http://code.angularjs.org/1.2.12/angular-route.min.js"></script>
<script>
'use strict';
var geo = angular.module('geo', [])
.controller('geoCtrl', ['$scope', '$http', function($scope, $http) {
$http.jsonp('http://ipinfo.io/?callback=JSON_CALLBACK')
.success(function(data) {
$scope.ip = data.ip;
$scope.hostname = data.hostname;
$scope.loc = data.loc; //Latitude and Longitude
$scope.org = data.org; //organization
$scope.city = data.city;
$scope.region = data.region; //state
$scope.country = data.country;
$scope.phone = data.phone; //city area code
});
}]);
</script>
Pagina di lavoro qui: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
Mi piace molto api.ipify.org
perché supporta sia HTTP che HTTPS.
Ecco alcuni esempi di come ottenere l'IP api.ipify.org
usando jQuery.
https://api.ipify.org?format=json
$.getJSON("https://api.ipify.org/?format=json", function(e) {
alert(e.ip);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
http://api.ipify.org?format=json
$.getJSON("http://api.ipify.org/?format=json", function(e) {
alert(e.ip);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Se non lo si desidera in JSON, esiste anche una risposta in chiaro su HTTPS
https://api.ipify.org
E c'è anche una risposta in chiaro su HTTP
http://api.ipify.org
Usa ipdata.co .
L'API fornisce anche dati di geolocalizzazione e ha 10 endpoint globali ciascuno in grado di gestire> 800 M richieste al giorno!
Questa risposta utilizza una chiave API "test" che è molto limitata e pensata solo per testare alcune chiamate. Iscriviti alla tua chiave API gratuita e ricevi fino a 1500 richieste al giorno per lo sviluppo.
$.get("https://api.ipdata.co?api-key=test", function (response) {
$("#response").html(response.ip);
}, "jsonp");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="response"></pre>
Non esiste davvero un modo affidabile per ottenere l'indirizzo IP del computer client.
Questo passa attraverso alcune delle possibilità. Il codice che utilizza Java si interromperà se l'utente ha più interfacce.
http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html
Osservando le altre risposte qui sembra che potresti voler ottenere l'indirizzo IP pubblico del client, che è probabilmente l'indirizzo del router che stanno usando per connettersi a Internet. Molte delle altre risposte qui ne parlano. Consiglio di creare e ospitare la propria pagina laterale del server per ricevere la richiesta e rispondere con l'indirizzo IP invece di dipendere dal servizio di qualcun altro che potrebbe continuare o meno a funzionare.
Offrirò un metodo che uso molto quando voglio archiviare informazioni nella pagina html e voglio che il mio javascript legga le informazioni senza dover passare i parametri al javascript. Ciò è particolarmente utile quando si fa riferimento all'esterno dello script, piuttosto che in linea.
Tuttavia, non soddisfa il criterio di "nessuno script lato server". Ma se puoi includere lo scripting lato server nel tuo html, fai come segue:
Crea elementi di etichette nascosti nella parte inferiore della tua pagina html, appena sopra il tag del corpo finale.
La tua etichetta sarà simile a questa:
<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>
Assicurati di chiamare una classe hiddenlabel
e impostare ilvisibility:hidden
modo che nessuno veda effettivamente l'etichetta. Puoi archiviare molte cose in questo modo, in etichette nascoste.
Ora, nel tuo javascript, per recuperare le informazioni memorizzate nell'etichetta (in questo caso l'indirizzo IP del client), puoi farlo:
var ip = document.getElementById("ip").innerHTML;
Ora la tua variabile "ip" è uguale all'indirizzo IP. Ora puoi passare l'ip alla tua richiesta API.
* MODIFICA 2 ANNI DOPO * Due perfezionamenti minori:
Uso abitualmente questo metodo, ma chiamo l'etichetta class="data"
, perché, in effetti, è un modo per archiviare i dati. Il nome della classe "etichetta nascosta" è una specie di nome stupido.
La seconda modifica è nel foglio di stile, anziché visibility:hidden
:
.data{
display:none;
}
... è il modo migliore per farlo.
$.getJSON("http://jsonip.com?callback=?", function (data) {
alert("Your ip address: " + data.ip);
});
Prova questo: http://httpbin.org/ip (o https://httpbin.org/ip )
Esempio con https:
$.getJSON('https://httpbin.org/ip', function(data) {
console.log(data['origin']);
});
Fonte: http://httpbin.org/
Prima di tutto la risposta effettiva : non è possibile utilizzare il codice eseguito puramente sul lato client per scoprire il proprio indirizzo IP.
Tuttavia, puoi semplicemente fare un GET verso https://api.muctool.de/whois e ricevere qualcosa di simile per ottenere l'indirizzo IP di un client
{
"ip": "88.217.152.15",
"city": "Munich",
"isp": "M-net Telekommunikations GmbH",
"country": "Germany",
"countryIso": "DE",
"postalCode": "80469",
"subdivisionIso": "BY",
"timeZone": "Europe/Berlin",
"cityGeonameId": 2867714,
"countryGeonameId": 2921044,
"subdivisionGeonameId": 2951839,
"ispId": 8767,
"latitude": 48.1299,
"longitude": 11.5732,
"fingerprint": "61c5880ee234d66bded68be14c0f44236f024cc12efb6db56e4031795f5dc4c4",
"session": "69c2c032a88fcd5e9d02d0dd6a5080e27d5aafc374a06e51a86fec101508dfd3",
"fraud": 0.024,
"tor": false
}
Puoi farlo interamente dal lato client e principalmente in JavaScript usando un oggetto Flash che js può chiamare. Flash può accedere all'indirizzo IP del computer locale che potrebbe non essere molto utile.
var call_to = "http://smart-ip.net/geoip-json?callback=?";
$.getJSON(call_to, function(data){
alert(data.host);
});
data.host
è l'indirizzo IP. Chiamalo semplicemente dal tuo browser.
http://smart-ip.net/geoip-json?callback=?
[Senza virgolette] e ottieni l'ip.
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });