web-dev-qa-db-fra.com

Comment obtenir l'adresse IP du client en utilisant JavaScript?

J'ai besoin de 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.

560
FlySwat

Je voudrais utiliser un service Web qui peut renvoyer JSON (avec jQuery pour simplifier les choses). Vous trouverez ci-dessous tous les services de recherche IP libres actifs que je pouvais trouver et les informations qu’ils renvoient. Si vous en savez plus, alors s'il vous plaît ajoutez un commentaire et je mettrai à jour cette réponse.


DB-IP

Essayez: http://api.db-ip.com/addrinfo?api_key= < votre clé api > & addr = < adresse IP >

Résultats:

{
  "address": "116.12.250.1",
  "country": "SG",
  "stateprov": "Central Singapore",
  "city": "Singapore"
}

Limitations:

  • 2500 demandes par jour
  • Ne supporte pas les rappels JSONP
  • Nécessite un paramètre d'adresse IP
  • Nécessite une adresse email pour obtenir votre clé API
  • Pas de SSL (https) avec le forfait gratuit

Géo-octets

Essayez-le: http://Gd.geobytes.com/GetCityDetails

$.getJSON('http://Gd.geobytes.com/GetCityDetails?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "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"
}

Limitations:

  • 16 384 demandes par heure
  • Pas de SSL (https) avec le forfait gratuit
  • Peut retourner au mauvais endroit (je suis à Singapour, pas en Arabie Saoudite)

GeoIPLookup.io

Essayez: https://json.geoiplookup.io/api

$.getJSON('https://json.geoiplookup.io/api?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
    "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
}

Limitations:

  • Inconnu

geoPlugin

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));
});

Résultats:

{
  "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": "&#36;",
  "geoplugin_currencySymbol_UTF8": "$",
  "geoplugin_currencyConverter": 1.4239
}

Limitations:

  • 120 demandes par minute
  • Pas de SSL (https) avec le forfait gratuit

cible de pirate

Essayez-le: https://api.hackertarget.com/geoip/?q= < adresse ip >

Résultats:

IP Address: 116.12.250.1
Country: SG
State: N/A
City: Singapore
Latitude: 1.293100
Longitude: 103.855797

Limitations:

  • 50 demandes par jour
  • Ne supporte pas les callbacks JSONP
  • Nécessite un paramètre d'adresse IP
  • Renvoie le texte brut

ipapi.co

Essayez: https://ipapi.co/json/

$.getJSON('https://ipapi.co/json/', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "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"
}

Limitations:

  • 1000 demandes par jour
  • Requiert SSL (https)

IP-API.com

Essayez-le: http://ip-api.com/json

$.getJSON('http://ip-api.com/json?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "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": ""
}

Limitations:

  • 150 demandes par minute
  • Pas de SSL (https) avec le forfait gratuit

Ipdata.co

Essayez ceci: https://api.ipdata.co

$.getJSON('https://api.ipdata.co', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "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
  }
}

Limitations:

  • 1500 demandes par jour
  • Nécessite une adresse email pour obtenir votre clé API
  • Requiert SSL (https)

Trouver IP

Essayez-le: https://ipfind.co/me?auth= < votre clé d'api >

$.getJSON('https://ipfind.co/me?auth=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "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"
  ]
}

Limitations:

  • 300 demandes par jour
  • Nécessite une inscription pour obtenir votre clé API

ipgeolocation

Essayez-le: https://api.ipgeolocation.io/ipgeo?apiKey= < votre clé d'api >

$.getJSON('https://api.ipgeolocation.io/ipgeo?apiKey=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "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"
  }
}

Limitations:

  • 50 000 demandes par mois
  • Nécessite une inscription pour obtenir votre clé API

ipify

Essayez: https://api.ipify.org/?format=json

$.getJSON('https://api.ipify.org?format=jsonp&callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "ip": "116.12.250.1"
}

Limitations:

  • None

IPInfoDB

Essayez ceci: https://api.ipinfodb.com/v3/ip-city/?key= < votre clé d'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));
});

Résultats:

{
  "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"
}

Limitations:

  • Deux demandes par seconde
  • Nécessite une inscription pour obtenir votre clé API

ipinfo.io

Essayez: https://ipinfo.io/json

$.getJSON('https://ipinfo.io/json', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "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"
}

Limitations:

  • 1000 demandes par jour

Ipregistry

Essayez-le: https://api.ipregistry.co/?key= < votre clé d'api >

$.getJSON('https://api.ipregistry.co/?key=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "ip": "116.12.250.1",
  "type": "IPv4",
  "hostname": null,
  "connection": {
    "asn": 3758,
    "organization": "SingNet"
  },
  "currency": {
    "code": "SGD",
    "name": "Singapore Dollar",
    "plural": "Singapore dollars",
    "symbol": "SGD",
    "symbol_native": "SGD",
    "format": null
  },
  "location": {
    "continent": {
      "code": "AS",
      "name": "Asia"
    },
    "country": {
      "area": 692,
      "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": null
    },
    "city": "Singapore",
    "postal": "18",
    "latitude": 1.2997,
    "longitude": 103.8546,
    "language": {
      "code": "cmn",
      "name": "cmn",
      "native": "cmn"
    },
    "in_eu": false
  },
  "security": {
    "is_bogon": 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-08-01T01:06:28+08:00",
    "name": "Singapore Standard Time",
    "offset": 28800,
    "in_daylight_saving": false
  }
}

Limitations:

  • Plan gratuit comprend 100 000 demandes
  • Nécessite une inscription pour obtenir votre clé API

ipstack (anciennement freegeoip.net)

Essayez: http://api.ipstack.com/ < adresse IP >? clé_accès = <votre clé d'api>

$.getJSON('http://api.ipstack.com/<ip_address>?access_key=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
    "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
    }
}

Limitations:

  • 10 000 demandes par mois
  • Nécessite un paramètre d'adresse IP
  • Nécessite une inscription pour obtenir votre clé API
  • Pas de SSL (https) avec le forfait gratuit

jsonip.com

Essayez-le: https://jsonip.com

$.getJSON('https://jsonip.com/?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "ip": "116.12.250.1",
  "about": "/about",
  "Pro!": "http://getjsonip.com",
  "reject-fascism": "Liberal America will prevail"
}

Limitations:

  • La réponse comprend la vente et la politique

Test JSON

Essayez-le: http://ip.jsontest.com/

$.getJSON('http://ip.jsontest.com/?callback=?', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "ip": "116.12.250.1"
}

Limitations:

  • Pas de SSL (https)
  • Descend beaucoup (sur quota), donc je ne l'utiliserais pas pour la production
  • Renvoie l'adresse IPv6 si vous en avez une, ce qui peut ne pas être ce que vous voulez

Nekudo

Essayez: https://geoip.nekudo.com/api

$.getJSON('https://geoip.nekudo.com/api', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "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"
}

Limitations:

  • Bloqué par des bloqueurs de publicité à l'aide de la liste EasyPrivacy

SmartIP

Essayez: https://smartip.io/api/?api_key= < votre clé d'api >

$.getJSON('https://smartip.io/api/?api_key=<your_api_key>', function(data) {
  console.log(JSON.stringify(data, null, 2));
});

Résultats:

{
  "status-code": 200,
  "country": {
    "is-metric": true,
    "is-in-europe": false,
    "region-geo-id": null,
    "continent-geo-id": 6255147,
    "country-geo-id": 1880251,
    "region-code": null,
    "region-name": null,
    "continent-code": "AS",
    "continent-name": "Asia",
    "capital": "Singapur",
    "country-name": "Singapore",
    "country-two-letter-iso-code": "SG",
    "country-iso-code": "SG"
  },
  "location": {
    "metro-code": null,
    "longitude": 103.8547,
    "latitude": 1.2929,
    "timezone": "Asia/Singapore",
    "Zip-code": null,
    "city": "Singapore"
  },
  "asn": {
    "organization": "SingNet",
    "asn": "AS3758"
  },
  "currency": {
    "native-name": "新币",
    "code": "SGD",
    "name": "Singapore Dollar",
    "symbol": "$"
  },
  "timezone": {
    "is-daylight-saving": false,
    "gmt-offset": 28800,
    "date-time": "2019-08-23T14:22:11+08:00",
    "Microsoft-name": "Singapore Standard Time",
    "iana-name": "Asia/Singapore"
  },
  "security": {
    "is-crawler": false,
    "is-proxy": false,
    "is-tor": false,
    "tor-insights": null,
    "proxy-insights": null,
    "crawler-insights": null
  },
  "crypto": {
    "is-crypto-node": false,
    "crypto-insights": null
  },
  "user-agent": {
    "os": {
      "name": "Windows",
      "platform": "x64",
      "version": "10",
      "family": "Windows"
    },
    "device": {
      "brand": "",
      "model": "",
      "family": "desktop"
    },
    "engine-version": "",
    "engine": "Blink",
    "name": "Chrome",
    "type": "browser",
    "header": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36",
    "version": "76.0.3809.100",
    "family": "Chrome"
  },
  "error": null,
  "hostname": "116.12.250.1",
  "ip-type": "ipv4",
  "ip": "116.12.250.1"
}

Limitations:

  • 250 000 demandes par mois
  • Nécessite une inscription pour obtenir votre clé API
  • Requiert SSL (https)

N'oubliez pas que, puisque tous ces services sont gratuits, votre kilométrage peut varier en termes de dépassement des quotas et de disponibilité, et qui sait quand/s'ils seront déconnectés (tableau A: Telize ) . La plupart de ces services offrent également un niveau payant si vous souhaitez davantage de fonctionnalités telles que la prise en charge de SSL.

En outre, comme Skobaljic l’a noté dans les commentaires ci-dessous, les quotas de demandes sont pour la plupart théoriques, car cela se produit côté client et que la plupart des utilisateurs finaux ne dépasseront jamais le quota.

MET À JOUR

623
thdoan

Mise à jour : J'ai toujours voulu créer une version min/uglifiée du code, voici donc un code de promesse 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))

Remarque: Ce nouveau code réduit ne renverra qu'une seule adresse IP si vous souhaitez que toutes les adresses IP de l'utilisateur (qui peuvent être plus dépendantes 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 WebRTC (du moins pour le moment). J'ai modifié le code source, réduit le nombre de lignes, ne faisant aucune demande d'étourdissement, car vous ne voulez que l'adresse IP locale, pas l'adresse IP publique, le code ci-dessous fonctionne dans les derniers Firefox et Chrome, exécutez simplement l'extrait 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 sommes en train de créer une fausse connexion entre homologues et que, pour que les homologues distants nous contactent, nous échangeons généralement des candidats à la glace. Et en lisant les candidats ice (à partir de la description de la session locale et de onIceCandidateEvent), nous pouvons dire l’adresse IP de l’utilisateur.

où j'ai pris le code de -> Source

259
mido

Vous pouvez le relayer via le côté serveur avec JSONP

Et tout en cherchant sur Google pour en trouver un, je l'ai trouvé ici sur SO Puis-je effectuer une recherche DNS (nom d'hôte en adresse IP) à l'aide de 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 de telize.com a en permanence arrêté le 15 novembre 2015 .

175
Chad Grant

La plupart des réponses ici "contournent" le besoin de code côté serveur en ... Frappant sur le serveur de quelqu'un d'autre. Ce qui est une technique totalement valide, sauf si vous avez réellement besoin pour obtenir l'adresse IP sans toucher un serveur.

Traditionnellement, cela n’était pas possible sans une sorte de plugin (et même dans ce cas, vous auriez probablement la mauvaise adresse IP si vous étiez derrière un NAT routeur), mais avec l'avènement de WebRTC, il est en fait possible de le faire ... Si vous ciblez navigateurs prenant en charge WebRTC (actuellement: Firefox, Chrome et Opera).

Veuillez lire la réponse de mido pour savoir comment récupérer des adresses IP de clients utiles à l'aide de WebRTC.

102
Shog9

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 renvoyées dans le même appel.

81
Malta
Essaye ça
$.get("http://ipinfo.io", function(response) {
    alert(response.ip);
}, "jsonp");

OR

$(document).ready(function () {
    $.getJSON("http://jsonip.com/?callback=?", function (data) {
        console.log(data);
        alert(data.ip);
    });
});

violon

75
Sridhar R

Cherchez pas plus loin

Départ 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 travail de JS (au lieu de vous demander pourquoi cette réponse a si peu de voix, essayez vous-même de 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 de ????

Trop paresseux pour cliquer? :O

Remarque : Désactivez Adblock Plus/uBlock & co avant d'exécuter la démonstration. Sinon, cela ne fonctionnera tout simplement pas.

J'ai rien à faire avec l'équipe IPify. Je pense juste que c’est ridiculement cool que quelqu'un fournisse un tel service pour le bien général.

55
FloatingRock

Tu ne peux pas. Vous devriez demander à un serveur.

54
SteveShaffer

Vous pouvez utiliser mon service http://ipinfo.io pour cela, ce 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 plus détaillé de JSFiddle qui affiche également les informations de réponse complètes, afin que vous puissiez voir tous les détails disponibles: http://jsfiddle.net/zK5FN/2/

26
Ben Dowling

Incluez ce code dans votre page: <script type="text/javascript" src="http://l2.io/ip.js"></script>

plus doc ici

18
L2.IO

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é dans les annonces par pays plugin

<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. De simples javascripts. : D

Si vous allez à 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 ''; }

Il ne répond pas encore vraiment à la question car

http://j.maxmind.com/app/geoip.js ne contient pas l'adresse IP (bien que je parie qu'il utilise l'adresse IP pour obtenir le pays).

Mais il est si facile de créer un script PhP qui affiche quelque chose comme

function visitorsIP()   { return '123.123.123.123'; }

Fais ça. Mettez sur http://votredomaine.com/votreip.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 adresse IP. Mais d’autres serveurs accessibles via javascript peuvent fonctionner aussi bien sans problème.

16
user4951

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 réseau local 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 hébergeant mon logiciel JavaScript (qui est presque toujours une adresse IP locale sur un réseau local qui se cache derrière quelque chose que la couche NAT).

Mido a posté une réponse FANTASTIQUE, ci-dessus, qui semble être la seule réponse qui fournissait réellement l'adresse IP du client.

Merci pour ça, Mido!

Cependant, la fonction présentée s'exécute de manière asynchrone. Je dois réellement utiliser l'adresse IP dans mon code, et avec une solution asynchrone, je pourrais essayer d'utiliser l'adresse IP avant qu'elle soit récupérée/apprise/stockée. Je devais pouvoir attendre les résultats avant de les utiliser.

Voici une version "Waitable" de la fonction de Mido. J'espère que ça 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>
15
BRebey

Avec l'utilisation de Smart-IP.net API Geo-IP . Par exemple, en utilisant jQuery:

$(document).ready( function() {
    $.getJSON( "http://smart-ip.net/geoip-json?callback=?",
        function(data){
            alert( data.Host);
        }
    );
});
14
Mikhus

Il existe une approche simple et gratuite qui ne demande aucune autorisation à votre visiteur.

Il consiste à soumettre une demande Ajax POST très simple à http://freegeoip.net/json . Une fois que vous avez reçu vos informations de localisation, en JSON, vous réagissez en conséquence en mettant à jour la page ou en redirigeant vers une nouvelle.

Voici comment vous soumettez votre demande d'informations de localisation:

jQuery.ajax( { 
  url: '//freegeoip.net/json/', 
  type: 'POST', 
  dataType: 'jsonp',
  success: function(location) {
     console.log(location)
  }
} );
13
Jijo Paulose

Eh bien, je m'éloigne de la question, mais j'avais un besoin similaire aujourd'hui et, bien que je ne puisse pas trouver l'identifiant du client à l'aide de Javascript, j'ai procédé comme suit.

Du côté du 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’adresse IP de l’utilisateur rendue par le serveur. En Javascript, je charge juste cette valeur.

Cela pourrait être utile à certaines personnes ayant les mêmes exigences que la vôtre (comme moi alors que je ne l’avais pas encore compris).

À votre santé!

12
Cyril Gupta

Pas possible en général, sauf si vous utilisez un type de service externe.

11
Eugene Lazutkin

Vous pouvez utiliser la bibliothèque javascript serinfo.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 son emplacement (pays, ville, etc.). Il est basé sur la base de données maxmind geoip.

Disclaimer: J'ai écrit cette bibliothèque

9
Vincent Durmont

Obtenez votre IP avec jQuery

vous pouvez obtenir votre adresse IP publique avec une ligne de JS? Il existe un service gratuit qui offre cela pour vous et une demande de get est tout ce que vous devez faire:

   $.get('http://jsonip.com/', function(r){ console.log(r.ip); });

Pour que l'extrait de code ci-dessus fonctionne, votre navigateur doit prendre en charge le CORS (partage de requêtes inter-origines). 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); });
9
sri_bb

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 sera interrompu si l'utilisateur possède 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 utilisé par le client pour se connecter à Internet. Beaucoup des autres réponses ici parlent de cela. Je recommanderais de créer et d’héberger votre propre page côté serveur afin de recevoir la demande et de répondre avec l’adresse IP au lieu de dépendre du service d’une autre personne susceptible de ne pas continuer à fonctionner.

8
Sarel Botha

Javascript/jQuery obtient l'adresse IP et l'emplacement du client (pays, ville)

Vous devez uniquement intégrer une balise avec un lien "src" au serveur. Le serveur renverra "codehelper_ip" en tant qu'objet/JSON et vous pourrez 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 détecte l'adresse IP réelle plus le pays

Si vous utilisez jQUery, vous pouvez essayer:

console.log(codehelper_ip); 

Il vous montrera plus d'informations sur l'objet retourné.

Si vous voulez une fonction de rappel, essayez 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>
8
Ken Le

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 en utilisant AngularJS. (Merci à Ricardo) Regarde ça.

<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

8
Yamenator

Utilisez ipdata.co .

L'API fournit également des données de géolocalisation et dispose de 10 points de terminaison globaux, chacun pouvant gérer plus de 800 millions de demandes par jour!

Cette réponse utilise une clé d'API 'test' très limitée et destinée uniquement à tester quelques appels. Signup pour votre propre clé API gratuite et recevez jusqu'à 1500 requêtes de développement par jour.

$.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>
7
Jonathan

J'aime beaucoup api.ipify.org car il prend en charge HTTP et HTTPS.

Voici quelques exemples d'obtention de l'adresse IP avec _api.ipify.org_ avec jQuery.

Format JSON sur HTTPS

_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>_

Format JSON sur HTTP

_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>_

Format de texte sur HTTPS

Si vous ne le souhaitez pas dans JSON, il existe également une réponse en texte brut via HTTPS.

_https://api.ipify.org
_

Format de texte sur HTTP

Et il y a aussi une réponse en texte brut sur HTTP

_http://api.ipify.org
_
7
Tim Penner

Si vous incluez toujours un fichier, vous pouvez faire un simple ajax get:

function ip_callback() {
    $.get("ajax.getIp.php",function(data){ return data; }
}

Et ajax.getIp.php serait ceci:

<?=$_SERVER['REMOTE_ADDR']?>
7
Martijn

Je vais proposer une méthode que j'utilise beaucoup lorsque je veux stocker des informations dans la page html et que je veux que mon javascript lise des informations sans avoir à passer de paramètres au javascript. Ceci est particulièrement utile lorsque votre script est référencé en externe plutôt qu'en ligne.

Il ne répond toutefois pas au critère "pas de script côté serveur". Mais si vous pouvez inclure des scripts côté serveur dans votre code 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 end body.

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éfinir le visibility:hidden afin que personne ne voie réellement l'étiquette. Vous pouvez stocker beaucoup de 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 faire ceci:

var ip = document.getElementById("ip").innerHTML;

Maintenant, votre variable "ip" est égale à l'adresse ip. Maintenant, vous pouvez passer l'ip à votre demande d'API.

* EDIT 2 ANS PLUS TARD * Deux améliorations mineures:

J'utilise couramment cette méthode, mais appelle l'étiquette class="data", car c'est en fait un moyen de stocker des données. Le nom de classe "hiddenlabel" est une sorte de nom stupide.

La deuxième modification est dans la feuille de style, à la place de visibility:hidden:

.data{
    display:none;
}

... est la meilleure façon de le faire.

6
TARKUS

Vous pouvez le faire entièrement côté client et principalement en JavaScript en utilisant un objet Flash que le js peut appeler. Flash peut accéder à l'adresse IP de la machine locale, ce qui pourrait ne pas être très utile.

5
nic ferrier
<!DOCTYPE html>
<html ng-app="getIp">
<body>
    <div ng-controller="getIpCtrl">
        <div ng-bind="ip"></div>
    </div>

    <!-- Javascript for load faster
    ================================================== -->
    <script src="lib/jquery/jquery.js"></script>
    <script src="lib/angular/angular.min.js"></script>
    <script>
    /// Scripts app

    'use strict';

    /* App Module */
    var getIp = angular.module('getIp', [ ]);

    getIp.controller('getIpCtrl', ['$scope', '$http',
      function($scope, $http) {
        $http.jsonp('http://jsonip.appspot.com/?callback=JSON_CALLBACK')
            .success(function(data) {
            $scope.ip = data.ip;
        });
      }]);

    </script>
</body>
</html>
4
Ricardo Olvera
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 ceci depuis votre navigateur.

http://smart-ip.net/geoip-json?callback=? [Sans guillemets] et obtenez l'ip.

4
Jawwad Ahmed
    $.getJSON("http://jsonip.com?callback=?", function (data) {
        alert("Your ip address: " + data.ip);
    });
4
Atif Hussain

Vous pouvez utiliser des services Web tels que: http://ip-api.com/

Exemple:

<script type="text/javascript" src="http://ip-api.com/json/?callback=foo">
<script>
    function foo(json) {
        alert(json.query)
    }
</script>

additional example: http://whatmyip.info    
4
user3463375

Tout d'abord la réponse réelle : Ce n'est pas possible 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 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
}
4
Alex

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/

3
SimC

Voici:

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
   alert(data.Host);
});
3
elf

Essayez JAvascript

$.getJSON("http://smart-ip.net/geoip-json?callback=?", function(data){
   alert(data.Host);
});

ou

http://jsfiddle.net/ourcodeworld/cks0v68q/?utm_source=website&utm_medium=embed&utm_campaign=cks0v68q

3
user8392362

Si vous utilisez NGINX quelque part, vous pouvez ajouter cet extrait de code et demander à votre propre serveur via n'importe quel outil AJAX.

location /get_ip {
    default_type text/plain;
    return 200 $remote_addr;
}
3
leitasat

Obtenir l'IP locale du système:

  try {
var RTCPeerConnection = window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
if (RTCPeerConnection) (function () {
    var rtc = new RTCPeerConnection({ iceServers: [] });
    if (1 || window.mozRTCPeerConnection) {
        rtc.createDataChannel('', { reliable: false });
    };

    rtc.onicecandidate = function (evt) {
        if (evt.candidate) grepSDP("a=" + evt.candidate.candidate);
    };
    rtc.createOffer(function (offerDesc) {
        grepSDP(offerDesc.sdp);
        rtc.setLocalDescription(offerDesc);
    }, function (e) { console.warn("offer failed", e); });


    var addrs = Object.create(null);
    addrs["0.0.0.0"] = false;
    function updateDisplay(newAddr) {
        if (newAddr in addrs) return;
        else addrs[newAddr] = true;
        var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; });
        LgIpDynAdd = displayAddrs.join(" or perhaps ") || "n/a";
        alert(LgIpDynAdd)
    }

    function grepSDP(sdp) {
        var hosts = [];
        sdp.split('\r\n').forEach(function (line) {
            if (~line.indexOf("a=candidate")) {
                var parts = line.split(' '),
                    addr = parts[4],
                    type = parts[7];
                if (type === 'Host') updateDisplay(addr);
            } else if (~line.indexOf("c=")) {
                var parts = line.split(' '),
                    addr = parts[2];
                alert(addr);
            }
        });
    }
})();} catch (ex) { }
3
RandyMohan

Toutes les réponses ci-dessus ont une partie serveur, pas une partie client pur. Cela devrait être fourni par le navigateur Web. À l'heure actuelle, aucun navigateur Web ne le supporte.

Cependant, avec cet addon pour firefox: https://addons.mozilla.org/en-US/firefox/addon/ip-address/ Vous devrez demander à vos utilisateurs d'installer cet addon. (c'est bien de ma part, une 3ème partie).

vous pouvez tester si l'utilisateur l'a installé.

var installed=window.IP!==undefined;

vous pouvez l'obtenir avec javascript, s'il est installé, alors var ip = IP.getClient (); var IPclient = ip.IP; // tandis que ip.url est l'URL

ip=IP.getServer();
var IPserver=ip.IP;
var portServer=ip.port;
//while ip.url is the url

//or you can use IP.getBoth();

plus d'informations ici: http://www.jackiszhp.info/tech/addon.IP.html

2
user1462586

Je ne suis pas un gourou javascript, mais si c'est possible, vous pouvez ouvrir un iframe avec http://www.whatismyip.com/automation/n09230945.asp comme source et lire le contenu du cadre.

Edit: cela ne fonctionnera pas à cause de la sécurité interdomaine.

2
UnkwnTech
<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
    <script>
        function systemip(){
        document.getElementById("ip").value = myip
        console.log(document.getElementById("ip").value)
        }
    </script>
2
Rajan Mandanka

Vous pouvez essayer d’utiliser notre https://ip-api.io geo ip API. Par exemple avec jQuery:

$(document).ready( function() {
    $.getJSON("http://ip-api.io/api/json",
        function(data){
            console.log(data);
        }
    );
});

De plus, https://ip-api.io vérifie les bases de données des mandataires, des mandataires publics et des spammeurs et fournit également ces informations.

Exemple de réponse:

{
  "ip": "182.35.213.213",
  "country_code": "US",
  "country_name": "United States",
  "region_code": "CA",
  "region_name": "California",
  "city": "San Francisco",
  "Zip_code": "94107",
  "time_zone": "America/Los_Angeles",
  "latitude": 32.7697,
  "longitude": -102.3933,
  "suspicious_factors": {
    "is_proxy": true,
    "is_tor_node": true,
    "is_spam": true,
    "is_suspicious": true // true if any of other fields (is_proxy, is_tor_node, is_spam) is true
  }
}
2
Andrey E

Un des problèmes avec certains des autres services que j'ai vus ici est qu'ils ne supportent pas IPv6 ou agissent de manière imprévisible en présence d'IPv6.

Comme j'avais moi-même besoin de cette fonctionnalité dans un environnement à double pile, j'ai mis en place mon propre service d'adresse IP, que vous pouvez trouver à l'adresse http://myip.addr.space/ . Il y a aussi une référence rapide à / help .

Pour l'utiliser avec jQuery, utilisez le noeud final /ip. Vous obtiendrez du texte brut contenant l'adresse IP, en fonction du sous-domaine que vous utilisez:

$.get("http://myip.addr.space/ip") renvoie IPv6 ou IPv4, selon ce qui est disponible pour le système. ( JSFiddle )

$.get("http://ipv4.myip.addr.space/ip") renvoie toujours IPv4 (ou échoue si aucun IPv4).

$.get("http://ipv6.myip.addr.space/ip") renvoie toujours IPv6 (ou échoue si aucun IPv6).

1
Michael Hampton
<script type="application/javascript">
  function getip(json)
  {
     alert(json.ip); 
  }
 <script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"></script>

Exécutez le script ci-dessus Cliquez ici

1
Prateek

J'ai mon propre api back end avec laravel, donc je ne fais habituellement que ce qui suit:

$(document).ready( function() {

    $.getJSON( "http://api.whoisdoma.com/v1/ip/visitor?api_key=key",
        function(data){
          alert( data.ip);
        }
    );

});

Pour plus de sécurité, je fournis une clé API indispensable pour obtenir des résultats.

1
xaoseric

La solution simple pour obtenir l'adresse IP consiste à ajouter le code suivant dans votre fichier.

  $.getJSON('https://api.ipify.org?format=json', function(data){

   // Your callback functions like   

    console.log(data.ip);
    localStorage.setItem('ip',data.ip);
    alert(data.ip);

  });

Il obtiendra l'adresse IP lors du chargement de la page.

1
Venkatesh Somu

Essaye ça

$.get("http://ipinfo.io", function(response) {
   alert(response.ip);
}, "jsonp");
1
Harendra Kr. Jadon
$.getJSON("http://jsonip.com?callback=?", function (data) {
    alert("Your ip: " + data.ip);
});
1
Sagar Bhosale

Java Script pour trouver l'IP

Pour obtenir l'adresse IP, je passe un appel JSON au service Web gratuit . comme

[jsonip.com/json, ipinfo.io/json, www.telize.com/geoip, ip-api.com/json, api.hostip.info/get_json.php]

et je passe le nom de la fonction de rappel qui sera appelée à la fin de la demande.

<script type="text/javascript">
    window.onload = function () {
    var webService = "http://www.telize.com/geoip";
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = webService+"?callback=MyIP";
        document.getElementsByTagName("head")[0].appendChild(script);
    };
    function MyIP(response) {
        document.getElementById("ipaddress").innerHTML = "Your IP Address is " + response.ip;
    }
</script>
<body>
    <form>
        <span id = "ipaddress"></span>
    </form>
</body>

pour la réponse XML code

WebRTC qui ne nécessite pas de support serveur.

0
Yash

Cela ne peut pas être fait avec Javascript seul (à moins que les clients aient un plugin de navigateur comme décrit ci-dessus). Cela ne peut pas être fait avec Flash sur le client non plus. Mais cela peut être fait sur le client en utilisant un applet Java (et javascript peut en parler), bien qu'il demande une autorisation pour toutes les autorisations. par exemple. Voir http://www.findmyrouter.net

0
Trevor Cox