web-dev-qa-db-fra.com

Obtenir l'adresse IP du client via un service Web tiers

Je voudrais lire mon adresse IP à partir de la page suivante ( http://l2.io/ip ou autre) en utilisant javascript pour l'enregistrer dans ma variable "myIp".

function getMyIP() {
  var myIp;
  ...
  return myIp;
}

Comment pouvez-vous faire?

15
Milton90

En vérifiant votre site lié , vous pouvez inclure une balise de script passant un ?var=desiredVarName paramètre qui sera défini comme une variable globale contenant l'adresse IP:

<script type="text/javascript" src="http://l2.io/ip.js?var=myip"></script>
                                                      <!-- ^^^^ -->
<script>alert(myip);</script>

Démo

Je crois que je n'ai pas à dire que cela peut être facilement usurpé (soit en utilisant des proxy ou des en-têtes de demande usurpés), mais cela vaut la peine de noter dans tous les cas.


Prise en charge HTTPS

Dans le cas où votre page est servie en utilisant le protocole https, la plupart des navigateurs bloqueront le contenu dans la même page servie en utilisant le protocole http (qui inclut des scripts et des images), donc les options sont plutôt limitées. Si vous avez <5k hits/jour, le Smart IP API peut être utilisé. Par exemple:

<script>
var myip;
function ip_callback(o) {
    myip = o.Host;
}
</script>
<script src="https://smart-ip.net/geoip-json?callback=ip_callback"></script>
<script>alert(myip);</script>

Démo

Edit: Apparemment, ce certificat de service https a expiré, donc l'utilisateur devrait ajouter une exception manuellement. Ouvrez directement son API pour vérifier l'état du certificat: https://smart-ip.net/geoip-json


Avec logique back-end

Le moyen le plus résilient et le plus simple, au cas où vous auriez une logique de serveur principal, serait de simplement sortir l'IP du demandeur dans un <script> tag, de cette façon, vous n'avez pas besoin de compter sur des ressources externes. Par exemple:

PHP:

<script>var myip = '<?php echo $_SERVER['REMOTE_ADDR']; ?>';</script>

Il y a aussi une solution plus robuste PHP (tenant compte des en-têtes qui sont parfois définis par des mandataires) dans cette réponse connexe .

C #:

<script>var myip = '<%= Request.UserHostAddress %>';</script>
33
Fabrício Matté
    $.ajax({
        url: '//freegeoip.net/json/',
        type: 'POST',
        dataType: 'jsonp',
        success: function(location) {
            alert(location.ip);
        }
    });

Cela fonctionnera également https

14
Ranjit Kumar

Un point de terminaison REST plus fiable serait http://freegeoip.net/json/

Renvoie l'adresse IP ainsi que la géolocalisation. Les demandes interdomaines sont également activées (Access-Control-Allow-Origin: *) afin que vous n'ayez pas à coder autour de JSONP.

9
Dayson

Si vous rencontrez un problème avec CORS, vous pouvez utiliser https://api.ipify.org/ .

function httpGet(theUrl)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open( "GET", theUrl, false );
    xmlHttp.send( null );
    return xmlHttp.responseText;
}


publicIp = httpGet("https://api.ipify.org/");
alert("Public IP: " + publicIp);

Je suis d'accord que l'utilisation d'un appel HTTP synchrone n'est pas une bonne idée. Vous pouvez alors utiliser l'appel ajax asynchrone.

3
Soumya Kanti
    <script type="application/javascript">
            function getip(json){
            alert(json.ip); // alerts the ip address
    }
    </script>

    <script type="application/javascript" src="http://jsonip.appspot.com/?callback=getip"></script>
1
bd_person

Cela récupère également les informations client.

var get = function(u){
    var x = new XMLHttpRequest;
    x.open('GET', u, false);
    x.send();
    return x.responseText;
}

JSON.parse(get('http://ifconfig.me/all.json'))
0
John Williams

Eh bien, si dans le HTML vous importez un script ...

<script type="text/javascript" src="//stier.linuxfaq.org/ip.php"></script>

Vous pouvez ensuite utiliser la variable userIP (qui serait l'adresse IP du visiteur) n'importe où sur la page.

Pour rediriger: <script>if (userIP == "555.555.555.55") {window.location.replace("http://192.168.1.3/flex-start/examples/navbar-fixed-top/");}</script>

Ou pour l'afficher sur la page: document.write (userIP);

AVERTISSEMENT: je suis l'auteur du script que j'ai dit d'importer. Le script arrive avec l'IP en utilisant PHP. Le code source du script est ci-dessous.

<?php //Gets the IP address $ip = getenv("REMOTE_ADDR") ; Echo "var userIP = '" . $ip . "';"; ?>

0
Kenny Stier