我试图为我的局域网上的用户提供一种方式"注册"网络管理员(我),而不必a)在我的计算机上托管一个页面b)在中央服务器上托管一个脚本(因为它只是一个路由器,不是真正的可靠的HTTP服务器)或c)注册动态域,以便前两个中的任何一个,并避免混淆发送到本地IP的链接的URL.
有没有一种简单的方法可以通过客户端脚本在屏幕上显示本地IP地址?我想也许我可以有一个iframe,指向一些通用的URL,路径中有一些javascript,这样我就可以让用户去一个非本地站点,iframe会弹出他们的IP地址,他们然后可以进入主远程页面中的表单.
如果所有其他方法都失败了,他们是否有办法查找跨平台的IP并且不涉及使用命令行(我认为第一个,即使不可能,也可能比第二个更真实).
值得庆幸的是,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)
是的,确实有。我认为这里有一个您想要做的事情的例子: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。(顺便说一句,我并不是要你偷这个小程序,但如果你想出于教育目的尝试一下,这是一个建议)
希望这可以帮助。标记