Réponses:
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
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:
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))
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:
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>
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
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?
<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>
Remarque: l' API telize.com a été définitivement arrêtée le 15 novembre 2015 .
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.
Vous pouvez faire un appel ajax à hostip.info ou un service similaire ...
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;
}
En prime, les informations de géolocalisation sont retournées dans le même appel.
Essaye ça
$.get("http://ipinfo.io", function(response) {
alert(response.ip);
}, "jsonp");
OU
$(document).ready(function () {
$.getJSON("http://jsonip.com/?callback=?", function (data) {
console.log(data);
alert(data.ip);
});
});
Tu ne peux pas. Il faudrait demander à un serveur.
Check-out http://www.ipify.org/
Selon eux:
- Vous pouvez l'utiliser sans limite (même si vous faites des millions de demandes par minute).
- ipify est complètement open source (consultez le référentiel GitHub ).
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):
<script>
function getIP(json) {
alert("My public IP address is: " + json.ip);
}
</script>
<script src="https://api.ipify.org?format=jsonp&callback=getIP"></script>
Trop paresseux pour copier / coller? Je l'aime. Voici une démo
Trop paresseux pour cliquer? :O
Remarque : désactivez Adblock Plus / uBlock & co avant d'exécuter la démo .. sinon, cela ne fonctionnera tout simplement pas.
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.
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:
$.get("http://ipinfo.io", function(response) {
console.log(response.ip);
}, "jsonp");
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/
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
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
<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>
Pas d'ajax. Juste des javascripts simples. :RÉ
Si vous allez sur http://j.maxmind.com/app/geoip.js, vous verrez qu'il contient
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 ''; }
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
function visitorsIP() { return '123.123.123.123'; }
Fais ça. Mettez sur http://yourdomain.com/yourip.php .
Alors fais
<script language="javascript" src="http://yourdomain.com/yourip.php"></script>
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.
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:
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>
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:
jQuery.ajax( {
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
console.log(location)
}
} );
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: -
<div style="display:none;visibility:hidden" id="uip"><%= Request.UserHostAddress %></div>
Utiliser Javascript
var ip = $get("uip").innerHTML;
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é!
<script>var uip='<%= Request.UserHostAddress %>';</script>
?
En utilisant l'API Geo-IP Smart-IP.net . Par exemple, en utilisant jQuery:
$(document).ready( function() {
$.getJSON( "http://smart-ip.net/geoip-json?callback=?",
function(data){
alert( data.host);
}
);
});
Pas possible en général sauf si vous utilisez une sorte de service externe.
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:
$.get('http://jsonip.com/', function(r){ console.log(r.ip); });
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:
$.getJSON('http://jsonip.com/?callback=?', function(r){ console.log(r.ip); });
Vous pouvez utiliser la bibliothèque 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
});
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
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.
// 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>
Plus d'informations sur Javascript Detect Real IP Address Plus Country
Si vous utilisez jQUery, vous pouvez essayer:
console.log(codehelper_ip);
Il vous montrera plus d'informations sur l'objet retourné.
Si vous souhaitez une fonction de rappel, veuillez essayer ceci:
// 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>
Le 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.
<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>
Page de travail ici: http://www.orangecountyseomarketing.com/projects/_ip_angularjs.html
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.
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>
Si vous ne le voulez pas en JSON, il y a aussi une réponse en clair sur HTTPS
https://api.ipify.org
Et il y a aussi une réponse en clair sur HTTP
http://api.ipify.org
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!
Cette réponse utilise une clé API «test» très limitée et destinée uniquement à tester quelques appels. Inscrivez -vous à votre propre clé API gratuite et recevez jusqu'à 1500 demandes par jour pour le développement.
$.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>
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.
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:
<label id="ip" class="hiddenlabel"><?php echo $_SERVER['REMOTE_ADDR']; ?></label>
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:
var ip = document.getElementById("ip").innerHTML;
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
:
.data{
display:none;
}
... est la meilleure façon de le faire.
$.getJSON("http://jsonip.com?callback=?", function (data) {
alert("Your ip address: " + data.ip);
});
Essayez ceci: http://httpbin.org/ip (ou https://httpbin.org/ip )
Exemple avec https:
$.getJSON('https://httpbin.org/ip', function(data) {
console.log(data['origin']);
});
Source: http://httpbin.org/
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
{
"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
}
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.
var call_to = "http://smart-ip.net/geoip-json?callback=?";
$.getJSON(call_to, function(data){
alert(data.host);
});
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.
$.getJSON('//freegeoip.net/json/?callback=?', function(data) { if (!data || !data.ip) alert('IP not found'); }).fail(function() { alert('$.getJSON() request failed'); });