Je dois en quelque sorte récupérer l'adresse IP du client en utilisant JavaScript; pas de code côté serveur, pas même SSI.
Cependant, je ne suis pas contre l'utilisation d'un script / service tiers gratuit.
la source
Je dois en quelque sorte récupérer l'adresse IP du client en utilisant JavaScript; pas de code côté serveur, pas même SSI.
Cependant, je ne suis pas contre l'utilisation d'un script / service tiers gratuit.
J'utiliserais un service Web qui peut renvoyer JSON (avec jQuery pour simplifier les choses). Vous trouverez ci-dessous tous les services de recherche IP actifs gratuits que j'ai pu trouver et les informations qu'ils renvoient. Si vous en savez plus, veuillez ajouter un commentaire et je mettrai à jour cette réponse.
Essayez-le: 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)
})
Retour:
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
Limites:
Essayez-le: http://api.db-ip.com/addrinfo?api_key= < votre clé api > & addr = < adresse ip >
Retour:
{
"address": "116.12.250.1",
"country": "SG",
"stateprov": "Central Singapore",
"city": "Singapore"
}
Limites:
Essayez-le: http://gd.geobytes.com/GetCityDetails
$.getJSON('http://gd.geobytes.com/GetCityDetails?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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"
}
Limites:
Essayez-le: https://json.geoiplookup.io/api
$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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
}
Limites:
Essayez-le: http://www.geoplugin.net/json.gp
$.getJSON('http://www.geoplugin.net/json.gp?jsoncallback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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
}
Limites:
Essayez-le: https://api.hackertarget.com/geoip/?q= < adresse IP >
Retour:
IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797
Limites:
Essayez-le: https://ipapi.co/json/
$.getJSON('https://ipapi.co/json/', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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"
}
Limites:
Essayez-le: http://ip-api.com/json
$.getJSON('http://ip-api.com/json?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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": ""
}
Limites:
Essayez-le: https://api.ipdata.co
$.getJSON('https://api.ipdata.co', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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
}
}
Limites:
Essayez-le: https://ipfind.co/me?auth= < votre clé api >
$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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"
]
}
Limites:
Essayez-le: https://api.ipgeolocation.io/ipgeo?apiKey= < votre clé api >
$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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"
}
}
Limites:
Essayez-le: https://api.ipify.org/?format=json
$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"ip": "116.12.250.1"
}
Limites:
Essayez-le: https://api.ipinfodb.com/v3/ip-city/?key= < votre clé 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));
});
Retour:
{
"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"
}
Limites:
Essayez-le: https://ipinfo.io/json
$.getJSON('https://ipinfo.io/json', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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"
}
Limites:
Essayez-le: https://api.ipregistry.co/?key= < votre clé api >
$.getJSON('https://api.ipregistry.co/?key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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
}
}
Limites:
Essayez-le: http://api.ipstack.com/ < adresse ip >? Access_key = <votre clé api>
$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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
}
}
Limites:
Essayez-le: https://jsonip.com
$.getJSON('https://jsonip.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"ip": "116.12.250.1",
"about": "https://jsonip.com/about",
"Pro!": "http://getjsonip.com",
"Get Notifications": "https://jsonip.com/notify"
}
Limites:
Essayez-le: http://ip.jsontest.com/
$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"ip": "116.12.250.1"
}
Limites:
Essayez-le: https://geoip.nekudo.com/api
$.getJSON('https://geoip.nekudo.com/api', function(data) {
console.log(JSON.stringify(data, null, 2));
});
Retour:
{
"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"
}
Limites:
Gardez à l'esprit que puisque ce sont tous des services gratuits, votre kilométrage peut varier en termes de dépassement de quota et de disponibilité, et qui sait quand / s'ils seront mis hors ligne sur la route (pièce A: Telize ). La plupart de ces services offrent également un niveau payant au cas où vous souhaiteriez plus de fonctionnalités telles que le support SSL.
De plus, comme Skobaljic l'a noté dans les commentaires ci-dessous, les quotas de demande sont principalement académiques car cela se produit côté client et la plupart des utilisateurs finaux ne dépasseront jamais le quota.
MISES À JOUR
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });
Mise à jour finale
Cette solution ne fonctionnerait plus car les navigateurs corrigent la fuite de webrtc: pour plus d'informations à ce sujet, lisez cette autre question: RTCIceCandidate ne retourne plus IP
Mise à jour : j'ai toujours voulu faire une version min / uglified du code, voici donc un code ES6 Promise:
Remarque: Ce nouveau code minifié ne retournerait qu'une seule IP si vous voulez toutes les IP de l'utilisateur (qui pourraient être plus en fonction de son réseau), utilisez le code d'origine ...
grâce à WebRTC , il est très facile d'obtenir une adresse IP locale dans les navigateurs pris en charge par WebRTC (au moins pour l'instant). J'ai modifié le code source, réduit les lignes, ne faisant aucune demande d'étourdissement car vous ne voulez que l'IP locale, pas l'IP publique, le code ci-dessous fonctionne dans les derniers Firefox et Chrome, exécutez simplement l'extrait de code et vérifiez par vous-même:
ce qui se passe ici, c'est que nous créons une connexion factice entre pairs, et pour que le pair distant nous contacte, nous échangeons généralement des candidats de glace entre eux. Et en lisant les candidats de glace (à partir de la description de la session locale et onIceCandidateEvent), nous pouvons dire l'IP de l'utilisateur.
d'où j'ai pris le code -> Source
la source
Vous pouvez, en le relayant côté serveur avec JSONP
Et lors de la recherche sur Google, je l'ai trouvé ici sur SO Puis-je effectuer une recherche DNS (nom d'hôte vers adresse IP) en utilisant Javascript côté client?
la source
Error Over Quota This application is temporarily over its serving quota. Please try again later.
La plupart des réponses ici "contournent" le besoin de code côté serveur en ... frappant le serveur de quelqu'un d'autre. C'est une technique totalement valable, sauf si vous avez réellement besoin d'obtenir l'adresse IP sans toucher un serveur.
Traditionnellement, cela n'était pas possible sans une sorte de plugin (et même alors, vous obtiendriez probablement la mauvaise adresse IP si vous étiez derrière un routeur NAT), mais avec l'avènement de WebRTC, il est en fait possible de le faire .. . Si vous ciblez les navigateurs qui supportent WebRTC (actuellement: Firefox, Chrome et Opera).
Veuillez lire la réponse de mido pour plus de détails sur la façon de récupérer des adresses IP clientes utiles à l'aide de WebRTC.
la source
Vous pouvez faire un appel ajax à hostip.info ou un service similaire ...
En prime, les informations de géolocalisation sont retournées dans le même appel.
la source
OU
Violon
la source
Tu ne peux pas. Il faudrait demander à un serveur.
la source
Cherchez pas plus loin
Check-out http://www.ipify.org/
Selon eux:
Voici un exemple de JS qui fonctionne (au lieu de vous demander pourquoi cette réponse a si peu de votes, essayez vous-même pour la voir en action):
Trop paresseux pour copier / coller? Je l'aime. Voici une démo
Trop paresseux pour cliquer?
:O
Je n'ai rien à voir avec l'équipe IPify. Je pense simplement que c'est ridiculement cool que quelqu'un fournisse un tel service pour le bien général.
la source
Vous pouvez utiliser mon service http://ipinfo.io pour cela, qui vous donnera l'adresse IP du client, le nom d'hôte, les informations de géolocalisation et le propriétaire du réseau. Voici un exemple simple qui enregistre l'IP:
Voici un exemple JSFiddle plus détaillé qui imprime également les informations de réponse complètes, afin que vous puissiez voir tous les détails disponibles: http://jsfiddle.net/zK5FN/2/
la source
http://ipinfo.io
//ipinfo.io
Incluez ce code dans votre page:
<script type="text/javascript" src="http://l2.io/ip.js"></script>
plus de doc ici
la source
Je dirais que le Tchad et Malte ont une excellente réponse. Cependant, les leurs sont compliqués. Je suggère donc ce code que j'ai trouvé à partir d'annonces par plugin de pays
Pas d'ajax. Juste des javascripts simples. :RÉ
Si vous allez sur http://j.maxmind.com/app/geoip.js, vous verrez qu'il contient
Cela ne répond pas encore vraiment à la question car
http://j.maxmind.com/app/geoip.js ne contient pas l'IP (bien que je parie qu'il utilise l'IP pour obtenir le pays).
Mais il est si facile de créer un script PhP qui ressemble à quelque chose
Fais ça. Mettez sur http://yourdomain.com/yourip.php .
Alors fais
La question mentionne spécifiquement de NE PAS utiliser de script tiers. Il n'y a pas d'autre moyen. Javascript ne peut pas connaître votre IP. Mais d'autres serveurs accessibles via javascript peuvent également fonctionner sans problème.
la source
Il y a deux interprétations à cette question. La plupart des gens ont interprété «IP client» comme signifiant l'adresse IP publique que le serveur Web voit en dehors du LAN et sur Internet. Ce n'est pas l'adresse IP de l'ordinateur client dans la plupart des cas, bien que
J'avais besoin de la véritable adresse IP de l'ordinateur qui exécute le navigateur qui héberge mon logiciel JavaScript (qui est presque toujours une adresse IP locale sur un LAN qui se trouve derrière quelque chose de cette couche NAT).
Mido a posté une réponse FANTASTIQUE, ci-dessus, qui semble être la seule réponse qui a vraiment fourni l'adresse IP du client.
Merci pour ça, Mido!
Cependant, la fonction présentée s'exécute de manière asynchrone. J'ai besoin d'utiliser réellement l'adresse IP dans mon code, et avec une solution asynchrone, je pourrais essayer d'utiliser l'adresse IP avant qu'elle ne soit récupérée / apprise / stockée. Je devais pouvoir attendre les résultats pour arriver avant de les utiliser.
Voici une version "en attente" de la fonction de Mido. J'espère que cela aide quelqu'un d'autre:
la source
Il existe une approche plus facile et gratuite qui ne demandera aucune autorisation à votre visiteur.
Elle consiste à soumettre une simple requête Ajax POST à http://freegeoip.net/json . Une fois que vous recevez vos informations de localisation, dans JSON, vous réagissez en conséquence en mettant à jour la page ou en la redirigeant vers une nouvelle.
Voici comment vous soumettez votre demande d'informations sur l'emplacement:
la source
Eh bien, je m'éloigne de la question, mais j'avais un besoin similaire aujourd'hui et même si je n'ai pas pu trouver l'ID du client en utilisant Javascript, j'ai fait ce qui suit.
Côté serveur: -
Utiliser Javascript
J'utilise ASP.Net Ajax, mais vous pouvez utiliser getElementById au lieu de $ get ().
Ce qui se passe, c'est que j'ai un élément div caché sur la page avec l'IP de l'utilisateur rendue depuis le serveur. Que dans Javascript, je charge juste cette valeur.
Cela pourrait être utile à certaines personnes ayant une exigence similaire à la vôtre (comme moi alors que je n'avais pas compris cela).
À votre santé!
la source
<script>var uip='<%= Request.UserHostAddress %>';</script>
?En utilisant l'API Geo-IP Smart-IP.net . Par exemple, en utilisant jQuery:
la source
Pas possible en général sauf si vous utilisez une sorte de service externe.
la source
Obtenez votre IP avec jQuery
vous pouvez obtenir votre adresse IP publique avec une seule ligne de JS? Il y a un service gratuit qui vous offre cela et une demande d'obtention est tout ce que vous devez faire:
Pour que l'extrait ci-dessus fonctionne, votre navigateur devra prendre en charge CORS (partage de demande d'origine croisée). Sinon, une exception de sécurité serait levée. Dans les navigateurs plus anciens, vous pouvez utiliser cette version, qui utilise une requête JSON-P:
la source
Vous pouvez utiliser la bibliothèque javascript userinfo.io .
Vous pouvez également utiliser requirejs pour charger le script.
Il vous donnera l'adresse IP de votre visiteur, ainsi que quelques données sur sa localisation (pays, ville, etc.). Il est basé sur la base de données geoip maxmind.
Avertissement: j'ai écrit cette bibliothèque
la source
Javascript / jQuery obtient l'adresse IP et l'emplacement du client (pays, ville)
Il vous suffit d'intégrer une balise avec un lien "src" au serveur. Le serveur renverra "codehelper_ip" en tant qu'objet / JSON, et vous pouvez l'utiliser immédiatement.
Plus d'informations sur Javascript Detect Real IP Address Plus Country
Si vous utilisez jQUery, vous pouvez essayer:
Il vous montrera plus d'informations sur l'objet retourné.
Si vous souhaitez une fonction de rappel, veuillez essayer ceci:
la source
language
attribut, utiliseztype="text/javascript"
plutôt, plus sur MDNLe service de rappel Appspot.com n'est pas disponible. ipinfo.io semble fonctionner.
J'ai fait une étape supplémentaire et récupéré toutes les informations géographiques à l'aide d'AngularJS. (Merci à Ricardo) Vérifiez-le.
Page de travail ici: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
la source
Si vous incluez toujours un fichier, vous pouvez faire un simple ajax get:
Et ce
ajax.getIp.php
serait:la source
J'aime beaucoup
api.ipify.org
car il prend en charge HTTP et HTTPS.Voici quelques exemples d'obtention de l'IP à l'
api.ipify.org
aide de jQuery.Format JSON sur HTTPS
Format JSON sur HTTP
Format de texte sur HTTPS
Si vous ne le voulez pas en JSON, il y a aussi une réponse en clair sur HTTPS
Format de texte sur HTTP
Et il y a aussi une réponse en clair sur HTTP
la source
Utilisez ipdata.co .
L'API fournit également des données de géolocalisation et dispose de 10 points de terminaison mondiaux capables chacun de gérer> 800 millions de demandes par jour!
la source
Il n'y a pas vraiment de moyen fiable d'obtenir l'adresse IP de l'ordinateur client.
Cela passe par certaines des possibilités. Le code qui utilise Java se cassera si l'utilisateur a plusieurs interfaces.
http://nanoagent.blogspot.com/2006/09/how-to-find-evaluate-remoteaddrclients.html
En regardant les autres réponses ici, il semble que vous souhaitiez obtenir l'adresse IP publique du client, qui est probablement l'adresse du routeur qu'ils utilisent pour se connecter à Internet. Beaucoup d'autres réponses ici en parlent. Je recommanderais de créer et d'héberger votre propre page côté serveur pour recevoir la demande et répondre avec l'adresse IP au lieu de dépendre du service de quelqu'un d'autre qui peut ou non continuer à fonctionner.
la source
Je vais proposer une méthode que j'utilise beaucoup lorsque je veux stocker des informations dans la page html, et que mon javascript lise les informations sans avoir à passer de paramètres au javascript. Cela est particulièrement utile lorsque votre script est référencé en externe, plutôt qu'en ligne.
Cependant, il ne répond pas au critère "pas de script côté serveur". Mais si vous pouvez inclure des scripts côté serveur dans votre html, procédez comme suit:
Créez des éléments d'étiquette cachés au bas de votre page html, juste au-dessus de la balise de fin de corps.
Votre étiquette ressemblera à ceci:
Assurez-vous de créer une classe appelée
hiddenlabel
et de définirvisibility:hidden
pour que personne ne voie réellement l'étiquette. Vous pouvez stocker de nombreuses choses de cette façon, dans des étiquettes cachées.Maintenant, dans votre javascript, pour récupérer les informations stockées dans l'étiquette (dans ce cas l'adresse IP du client), vous pouvez le faire:
Maintenant, votre variable "ip" est égale à l'adresse ip. Vous pouvez maintenant transmettre l'ip à votre demande d'API.
* MODIFIER 2 ANS PLUS TARD * Deux améliorations mineures:
J'utilise régulièrement cette méthode, mais j'appelle l'étiquette
class="data"
, car, en fait, c'est un moyen de stocker des données. Le nom de classe "hiddenlabel" est une sorte de nom stupide.La deuxième modification se trouve dans la feuille de style, au lieu de
visibility:hidden
:... est la meilleure façon de le faire.
la source
la source
Essayez ceci: http://httpbin.org/ip (ou https://httpbin.org/ip )
Exemple avec https:
Source: http://httpbin.org/
la source
Tout d'abord, la vraie réponse : il n'est pas possible d'utiliser du code exécuté purement côté client pour trouver votre propre adresse IP.
Cependant, vous pouvez simplement faire un GET vers https://api.muctool.de/whois et recevoir quelque chose comme pour obtenir l'adresse IP d'un client
la source
Vous pouvez le faire entièrement côté client et principalement en JavaScript en utilisant un objet Flash que les js peuvent appeler. Flash peut accéder à l'adresse IP de la machine locale qui peut ne pas être très utile.
la source
data.host
est l'adresse IP. Appelez simplement cela depuis votre navigateur.http://smart-ip.net/geoip-json?callback=?
[Sans guillemets] et obtenez l'ip.la source