Get client IP address via third party web service

后端 未结 7 1454
一整个雨季
一整个雨季 2020-11-27 19:02

I would like to read my ip address from the following page(http://l2.io/ip or other) using javascript to save him in my variable \"myIp\".

function getMyIP()         


        
相关标签:
7条回答
  • 2020-11-27 19:03
        <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>
    
    0 讨论(0)
  • 2020-11-27 19:07

    Well, if in the HTML you import a script...

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

    You can then use the variable userIP (which would be the visitor's IP address) anywhere on the page.

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

    Or to show it on the page: document.write (userIP);

    DISCLAIMER: I am the author of the script I said to import. The script comes up with the IP by using PHP. The source code of the script is below.

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

    0 讨论(0)
  • 2020-11-27 19:08

    Checking your linked site, you may include a script tag passing a ?var=desiredVarName parameter which will be set as a global variable containing the IP address:

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

    Demo

    I believe I don't have to say that this can be easily spoofed (through either use of proxies or spoofed request headers), but it is worth noting in any case.


    HTTPS support

    In case your page is served using the https protocol, most browsers will block content in the same page served using the http protocol (that includes scripts and images), so the options are rather limited. If you have < 5k hits/day, the Smart IP API can be used. For instance:

    <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

    Edit: Apparently, this https service's certificate has expired so the user would have to add an exception manually. Open its API directly to check the certificate state: https://smart-ip.net/geoip-json


    With back-end logic

    The most resilient and simple way, in case you have back-end server logic, would be to simply output the requester's IP inside a <script> tag, this way you don't need to rely on external resources. For example:

    PHP:

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

    There's also a more sturdy PHP solution (accounting for headers that are sometimes set by proxies) in this related answer.

    C#:

    <script>var myip = '<%= Request.UserHostAddress %>';</script>
    
    0 讨论(0)
  • 2020-11-27 19:09

    A more reliable REST endpoint would be http://freegeoip.net/json/

    Returns the ip address along with the geo-location too. Also has cross-domain requests enabled (Access-Control-Allow-Origin: *) so you don't have to code around JSONP.

    0 讨论(0)
  • 2020-11-27 19:16

    This pulls back client info as well.

    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 讨论(0)
  • 2020-11-27 19:24

    If you face an issue of CORS, you can use 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);
    

    I agree that using synchronous HTTP call is not good idea. You can use async ajax call then.

    0 讨论(0)
提交回复
热议问题