通过第三方Web服务获取客户端IP地址

时间:2013-07-01 22:59:12

标签: javascript ip

我想从以下页面(http://l2.io/ip或其他)中读取我的IP地址,使用javascript将其保存在我的变量“myIp”中。

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

你怎么办?

7 个答案:

答案 0 :(得分:33)

检查linked site,您可以包含一个脚本标记,该标记会传递?var=desiredVarName参数,该参数将被设置为包含IP地址的全局变量:

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

Demo

我相信我不必说这很容易被欺骗(通过使用代理或欺骗性请求标头),但无论如何都值得注意。


HTTPS支持

如果您的网页使用https协议投放,大多数浏览器都会阻止使用http协议(包括脚本和图片)提供的同一页面中的内容,因此选项相当有限。如果你有&lt;每天5k次点击,可以使用Smart IP API。例如:

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

Demo

编辑:显然,此https服务的证书已过期,因此用户必须手动添加例外。直接打开其API以检查证书状态:https://smart-ip.net/geoip-json


使用后端逻辑

如果您拥有后端服务器逻辑,最有弹性且最简单的方法是在<script>标记内简单地输出请求者的IP,这样您就不需要依赖外部资源。例如:

PHP:

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

related answer中还有一个更加坚固的PHP解决方案(考虑有时由代理设置的标头)。

C#:

<script>var myip = '<%= Request.UserHostAddress %>';</script>

答案 1 :(得分:14)

    $.ajax({
        url: '//freegeoip.net/json/',
        type: 'POST',
        dataType: 'jsonp',
        success: function(location) {
            alert(location.ip);
        }
    });

这也适用于https

答案 2 :(得分:9)

更可靠的REST端点是http://freegeoip.net/json/

也返回IP地址和地理位置。还启用了跨域请求(Access-Control-Allow-Origin:*),因此您无需围绕JSONP进行编码。

答案 3 :(得分:3)

如果您遇到CORS问题,可以使用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);

我同意使用同步HTTP调用并不是一个好主意。您可以使用async ajax调用。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

这也会撤回客户信息。

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'))

答案 6 :(得分:0)

好吧,如果在HTML中导入脚本......

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

然后,您可以在页面的任何位置使用变量userIP(可能是访问者的IP地址)。

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

或者在页面上显示:document.write (userIP);

免责声明:我是我要导入的脚本的作者。该脚本使用PHP提供IP。脚本的源代码如下。

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