开发者

Non-server side method of getting local IP address in browser?

I am trying to provide a way for users on my LAN to "register" with the Network admin (me) without having to either a) host a page on my computer b) host a script on the central server (since it is only a router, not really a solid HTTP server) or c) sign up for a Dynamic Domain in order to either either of the first two and avoid the confusion of sending out a URL to a link to a local IP.

Is there a simple way to display the local IP address on screen via a client-side script? I'm thinking maybe I could have an iframe that points to some generic url with some javascript in the path, so that I can have the users go to a non-local site, and the iframe would pop up with their IP address that they can then enter into a form in the main remote page.

If all else fails, is there a way for them to look up th开发者_C百科eir IP that is cross-platform and doesn't involve using the command line (I think the first, even if impossible, is probably more realistic than the second).


Thankfully to Webrtc it is possible to access local IP from javascript.

Take a look at: http://net.ipcalf.com/ (source)

( It works in chrome )

However accessing local IP from Javascript could be a privacy and security issue.

and below simpler example then net.ipcalf.com

and on the jsfiddle

var RTCPeerConnection = window.webkitRTCPeerConnection || window.mozRTCPeerConnection;

var configuration = { "iceServers": [] };
var pc;
var localIP;

if(RTCPeerConnection){  

    pc = new RTCPeerConnection(configuration);
    pc.onicecandidate = function (evt) {  
        if (evt.candidate) { 
            if (!localIP) { 
                localIP = getIpFromString(  evt.candidate.candidate );
                console.log(localIP);
            }
        }
    };

     pc.createOffer(function (offerDesc) {;
        pc.setLocalDescription(offerDesc);                                      
    }, function (e) { console.warn("offer failed", e); });

    function getIpFromString(a)
    {
        var r = a.match(/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/);
        return r[0];
    }

} else {
 //browser doesn't support webrtc   
}


Yes there is actually. I think there is an example of what you are trying to do here: http://www.whatsmyip.org/more/

if you view source on that page you see the following for the internal ip section:

                            <p><b>Internal (LAN) IP</b>: <span id="localip">Checking...</span>
                        <script>
                            function MyAddress(IP)
                                { document.getElementById("localip").innerHTML = IP; } 
                        </script>
                        <applet code="MyAddress.class" MAYSCRIPT width=0 height=0>
                            Sorry You Need Java For This To Work
                        </applet>

So I'm thinking you have a couple of options, you can either download the copy of the compiled java applet on that site, or write your own. The general idea of how this works, is the java applets loads read the local ip, and then calls into the DOM and updates the innterHTML of that element. (btw, i'm not telling you to steal the applet, but it's a suggestion if you wanted to try it out for educational purposes)

Hope this helps. Mark

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜