首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 不连接外网获取内网ip

在 JavaScript 中获取内网 IP 地址通常需要在支持 WebRTC(Web Real-Time Communication)的环境下进行。WebRTC 允许浏览器之间进行实时通信,并在此过程中可能会暴露本地网络信息,包括内网 IP 地址。

基础概念:

  • WebRTC:一种支持网页浏览器进行实时语音对话或视频聊天的技术。
  • STUN(Session Traversal Utilities for NAT)服务器:用于帮助客户端发现自己的公网 IP 地址和端口。
  • ICE(Interactive Connectivity Establishment)框架:用于在 NAT 后的设备之间建立连接。

获取内网 IP 的方法: 可以通过监听 WebRTC 的 icecandidate 事件来获取本地网络信息。

示例代码:

代码语言:txt
复制
function getLocalIPs(callback) {
    const RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
    const ips = {};

    if (!RTCPeerConnection) {
        callback(ips);
        return;
    }

    const rtc = new RTCPeerConnection({ iceServers: [] });
    rtc.createDataChannel('', { reliable: false });

    rtc.onicecandidate = function (ice) {
        if (!ice || !ice.candidate || !ice.candidate.candidate) return;
        const ipMatch = /([0-9]{1,3}(\.[0-9]{1,3}){3})/.exec(ice.candidate.candidate);
        if (ipMatch) {
            const ip = ipMatch[1];
            ips[ip] = true;
            callback(ips);
        }
    };

    rtc.createOffer().then(offer => rtc.setLocalDescription(offer));
}

getLocalIPs(function (ips) {
    console.log('内网 IP 地址:', Object.keys(ips));
});

优势:

  • 不需要连接外网即可获取内网 IP。
  • 可以在客户端直接执行,无需服务器参与。

应用场景:

  • 内部网络管理工具。
  • 局域网内的设备发现和通信。

注意事项:

  • 获取到的 IP 地址可能包括多个,需要根据实际情况筛选。
  • 由于隐私和安全问题,现代浏览器可能会限制或改变 WebRTC 的行为,导致此方法在未来可能不再有效。
  • 用户的网络配置(如 NAT 类型)可能会影响获取到的 IP 地址。

常见问题及解决方法:

  • 无法获取 IP 地址:可能是浏览器不支持 WebRTC 或者安全设置阻止了相关操作。确保使用支持 WebRTC 的浏览器,并检查浏览器的隐私设置。
  • 获取到的 IP 不正确:可能是由于网络配置复杂(如多重 NAT),可以尝试在不同的网络环境下测试。

请注意,由于隐私和安全的原因,未来浏览器可能会进一步限制通过 WebRTC 获取本地 IP 地址的能力。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • frp内网穿透应用1-通过外网ip访问布置于内网的web服务

    www.yourdomain.com [common] bind_port = 7000    //与frpc通讯端口,vps上必须开端口 vhost_http_port = 8080        //外网访问端口.../frps.ini 3、修改客户端 frpc.ini 文件,设置 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 web 服务对应的端口: [common] server_addr... = x.x.x.x        //外网vps的ip server_port = 7000        //服务器端的配置文件中的bind_port auth_token = 123        ...//服务器端的配置文件中的auth_token [web] type = http        //同服务器端 local_port = 80        //内网程序端口 4、启动客户端frpc.../frpc.ini 5、通过浏览器访问 http://www.yourdomain.com:8080 即可访问到处于内网机器上的 web 服务

    2.5K10

    获取云服务器外网IP和本地电脑出口IP

    注意:有代理的情况下,不同方式获取的IP可能不同 比如我这台北京办公电脑,有不同的海外代理IP powershell里,一直获取到海外出口代理IP而不是我北京运营商IP 浏览器里,whatismyipaddress.com...cip.cc 或 www.ipplus360.com 【通过公网浏览器获取机器外网IP】 查询本机的上网出口IP 1)代理出口IP查询地址:www.ip138.com 或 www.ipshudi.com...或 ipchaxun.com 或 cip.cc 或 www.ipplus360.com 2)访问海外出口IP查询地址: whatismyipaddress.com 【通过powershell获取机器外网...UseBasicParsing).Content (Invoke-WebRequest 'http://ifconfig.me' -UseBasicParsing).Content 【通过linux curl获取机器外网...curl ipinfo.io/115.159.148.149 curl ipinfo.io/47.102.104.60 curl ipinfo.io/119.45.62.115 【通过腾讯云服务器内网获取

    3.6K21

    内网穿透是不是都无法获取原始请求IP

    通常情况下,当外部网络通过内网穿透工具访问本地服务时,内网服务器只能看到内网穿透工具的IP地址,无法直接获取原始访问IP。...(防止误解说明:IBCS虚拟专线是基于二层网络架构的IP专线技术,不是服务器端口转发,也不是内网穿透)图片除了神卓互联的IBCS虚拟专线可以直接获取原始请求IP,IBCS虚拟专线是基于二层网络架构的,所以可以获取原始请求...IP,其它的内网穿透、如FRP等理论上均无法获取,以下是一些在公网服务器上的解决方案:然而,有一些技术可以用于获取原始访问IP,具体取决于所使用的内网穿透工具和网络环境。...自定义日志记录:如果你有控制内网服务器的能力,你可以在服务代码中添加日志记录功能,并在每次请求时记录访问IP地址。这样你就可以在日志中获取原始访问IP。...需要注意的是,以上方法的适用性取决于你所使用的内网穿透工具和网络环境。企业级内网穿透可以使用神卓互联,并非所有的工具和配置都支持获取原始访问IP。

    77200

    华为防火墙配置端口映射,并且在内网也能用外网的IP和端口访问

    ,使得外网能访问内网服务器 名称:随意填写,但是最好有一定意义,以便于识别;公网地址:电信运营商提供的IP地址;私网地址:即内网的服务器;协议:根据需要选择,此处选择TCP,公网接口:在外网开放给用户的端口...,为安全起见,最好不要和内网真正使用的端口相同;私网接口:内网服务器真正使用的服务端口 配置完成后,可以在外网,用telnet命令检测,映射是否生效: telnet 电信运营商IP 公网端口号 如果有反应...,就表示配置成功,如果连接失败,那么需要在内网执行命令 telnet 内网服务器IP 私网端口号 如果有反应,就表示端口服务正常工作中,那么前面在外网连接失败,要从防火墙上找原因;如果连接失败,那么需要检查服务器上的相关服务是否已启动...其实要解决这个问题,也不难,就是在代码中抛弃IP地址,改为绑定域名:在外网,只要在域名注册商的DNS管理后台,写一条A记录,指向电信运营商给的公网IP地址就可以了;同样道理,在内网,就在自己的DNS服务器上...,写一条A记录,指向内网服务器的IP地址,这样的话,无论客户端是在内网还是在外网,都能解析到需要的IP地址,也就能顺利访问到服务器了。

    7.1K31

    Nest.js 实战 (十四):如何获取客户端真实 IP

    问题解析在 Nest.js 应用中,当你试图通过 request.ip 获取客户端的 IP 地址时,如果总是返回 ::1 或者 ::ffff:127.0.0.1,这通常意味着请求来自本地主机。...要解决这个问题并获取客户端的真实 IP 地址,您需要确保代理服务器正确设置了转发头,比如 X-Forwarded-For 或 X-Real-IP,并且您的后端服务能够正确读取这些头信息来确定客户端的 IP...$remote_addr; // 设置 X-Real-IP 头为客户端的真实 IP 地址。...upstream_cache_status; add_header Cache-Control no-cache; proxy_ssl_server_name off; }我们可以写一个方法来获取代理后的地址...:import { Request } from 'express';/** * @description: 获取客户端真实 IP * @param {Request} req */export const

    24210

    running 3 virtual ma

    此种环境下 物理机yes虚拟机 物理机yes外网 虚拟机yes外网 虚拟机yes虚拟机 VMnet1: hostonly:仅主机  物理机用物理网卡与外网相连 用vm1虚拟网卡与虚拟机建立虚拟连接 ...虚拟网卡与虚拟机之间有虚拟dhcp服务器 可以为虚拟机自动分配ip地址 此种环境下 物理机yes虚拟机 物理机yes外网 虚拟机no外网 虚拟机yes虚拟机 VMnet8: NAT:网络共享 物理机用物理网卡与外网相连... 用vm8虚拟网卡与虚拟机建立虚拟连接 VMware负责在vm8虚拟网卡和物理网卡之间做地址转换NAT 所以 虚拟机可以通过这种方式通过物理网卡访问外网,此时物理网卡和虚拟网卡相当于一台NAT服务器上的连接外网和内网的两个通道... 物理机相当于NATserver 此种环境下 物理机yes虚拟机 物理机yes外网 虚拟机yes外网 虚拟机yes虚拟机 VMnet2: 虚拟通道:属于自定义网卡类型 这种网络与物理机和外网皆不连接相当于在一个完全与真实系统隔离的环境中放置了可以互相通信的虚拟机...此种环境下 物理机no虚拟机 物理机yes外网 虚拟机no外网 虚拟机yes虚拟机 另外VMnet3~9也都可以设置成虚拟通道以完成用户的多种需求 虚拟机的虚拟方式: 1.半虚拟化 虚拟机接受的需要

    69910

    Java限制IP访问页面

    最近遇到一个需求,一个只能内网访问的网站,需要限制ip访问。就是网站内的部分文章只有白名单内的ip才能打开。因为是静态化的网站,所有文章都是静态html页面。...所以首先想到的就是直接js获取访问者ip然后再判断是否在白名单内,不在白名单内就到没有权限页面。 但是JS获取内网Ip还是比较麻烦的,查到几个方法最后试了都不行。...JS获取外网ip的方法: //最简单的获取外网ip的方法。可以直接用,但是没啥用..     document.write(returnCitySN["cip"]); JS获取内网Ip的方法://有些浏览器获取到的加密...) { alert(ip); }); 利用WebRTC获取真实内网Ip,WebRTC是一个支持网页浏览器进行实时语音对话或视频对话的API 由于WebRTC在建立连接过程中,会向对方发送本地地址SDP,

    3.6K50
    领券