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?
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>
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.
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>
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
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>
$.ajax({
url: '//freegeoip.net/json/',
type: 'POST',
dataType: 'jsonp',
success: function(location) {
alert(location.ip);
}
});
Cela fonctionnera également https
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.
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.
<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>
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'))
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 . "';"; ?>