在浏览器中获取本地IP地址的非服务器端方法?

Ant*_*ony 6 ip-address

我试图为我的局域网上的用户提供一种方式"注册"网络管理员(我),而不必a)在我的计算机上托管一个页面b)在中央服务器上托管一个脚本(因为它只是一个路由器,不是真正的可靠的HTTP服务器)或c)注册动态域,以便前两个中的任何一个,并避免混淆发送到本地IP的链接的URL.

有没有一种简单的方法可以通过客户端脚本在屏幕上显示本地IP地址?我想也许我可以有一个iframe,指向一些通用的URL,路径中有一些javascript,这样我就可以让用户去一个非本地站点,iframe会弹出他们的IP地址,他们然后可以进入主远程页面中的表单.

如果所有其他方法都失败了,他们是否有办法查找跨平台的IP并且不涉及使用命令行(我认为第一个,即使不可能,也可能比第二个更真实).

Paw*_*iel 8

值得庆幸的是,Webrtc可以从javascript访问本地IP.

看看:http://net.ipcalf.com/(来源)

(适用于镀铬)

但是,从Javascript访问本地IP可能是隐私和安全问题.

以下是net.ipcalf.com的简单示例

并在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   
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*p51 1

是的,确实有。我认为这里有一个您想要做的事情的例子:http://www.whatsmyip.org/more/

如果您在该页面上查看源代码,您会看到内部 ip 部分的以下内容:

                            <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>
Run Code Online (Sandbox Code Playgroud)

所以我想你有几个选择,你可以在该网站上下载已编译的java小程序的副本,或者编写你自己的。其工作原理的总体思路是,java 小程序加载读取本地 IP,然后调用 DOM 并更新该元素的 interHTML。(顺便说一句,我并不是要你偷这个小程序,但如果你想出于教育目的尝试一下,这是一个建议)

希望这可以帮助。标记