在JS中获取当前IP(无第三方服务)[重复]

2024-01-09

是否可以使用 WebRTC JS API 和 ICE 协议(公共 IP 为 STUN)获取客户端 IP?


是的,您可以,使用 WebRTC JS API 和 ICE 协议(公共 IP 为 STUN)。

更多信息here https://github.com/diafygi/webrtc-ips.

//get the IP addresses associated with an account
function getIPs(callback){
    var ip_dups = {};

    //compatibility for firefox and chrome
    var RTCPeerConnection = window.RTCPeerConnection
        || window.mozRTCPeerConnection
        || window.webkitRTCPeerConnection;
    var useWebKit = !!window.webkitRTCPeerConnection;

    //bypass naive webrtc blocking using an iframe
    if(!RTCPeerConnection){
        //NOTE: you need to have an iframe in the page right above the script tag
        //
        //<iframe id="iframe" sandbox="allow-same-origin" style="display: none"></iframe>
        //<script>...getIPs called in here...
        //
        var win = iframe.contentWindow;
        RTCPeerConnection = win.RTCPeerConnection
            || win.mozRTCPeerConnection
            || win.webkitRTCPeerConnection;
        useWebKit = !!win.webkitRTCPeerConnection;
    }

    //minimal requirements for data connection
    var mediaConstraints = {
        optional: [{RtpDataChannels: true}]
    };

    var servers = {iceServers: [{urls: "stun:stun.services.mozilla.com"}]};

    //construct a new RTCPeerConnection
    var pc = new RTCPeerConnection(servers, mediaConstraints);

    function handleCandidate(candidate){
        //match just the IP address
        var ip_regex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/
        var ip_addr = ip_regex.exec(candidate)[1];

        //remove duplicates
        if(ip_dups[ip_addr] === undefined)
            callback(ip_addr);

        ip_dups[ip_addr] = true;
    }

    //listen for candidate events
    pc.onicecandidate = function(ice){

        //skip non-candidate events
        if(ice.candidate)
            handleCandidate(ice.candidate.candidate);
    };

    //create a bogus data channel
    pc.createDataChannel("");

    //create an offer sdp
    pc.createOffer(function(result){

        //trigger the stun server request
        pc.setLocalDescription(result, function(){}, function(){});

    }, function(){});

    //wait for a while to let everything done
    setTimeout(function(){
        //read candidate info from local description
        var lines = pc.localDescription.sdp.split('\n');

        lines.forEach(function(line){
            if(line.indexOf('a=candidate:') === 0)
                handleCandidate(line);
        });
    }, 1000);
}

//Test: Print the IP addresses into the console
getIPs(function(ip){console.log(ip);});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在JS中获取当前IP(无第三方服务)[重复] 的相关文章

  • 实现快速 Javascript 搜索?

    基本上 我有一个带有文本框的页面和 ul 列在其下面 这 ul 由用户的朋友列表填充 用户开始在文本框中输入朋友的名字 例如按 r 我想立即更新 ul 每次按键仅显示名字以 R 开头的朋友 例如 Richard Redmond Raheem
  • JavaScript 中的“import”和“require”有什么区别?

    当在 JavaScript 中包含包时我什么时候想使用import vs require 它们是相同的还是有不同的用例 您可以在加载的模块名称未预定义 静态的情况下进行动态加载 或者仅在 真正需要 时有条件地加载模块 取决于某些代码流 加载
  • 计算字符串中的唯一单词

    下面我尝试将字符串数组提供给一个函数 该函数将唯一单词添加到单词数组中 并且如果该单词已经在数组中 则增加计数数组中相应元素的计数 var words var counts calculate a b calculate a c funct
  • 使用 .add() 选择多个 jQuery 对象

    是否 add http api jquery com add 方法允许一次选择多个对象而不是一次添加一个 one add two add three add four on click function 以下变量的设置方式相同 因为每个变量
  • 如何以 Rails 方式处理 JavaScript 事件(例如“link_to :remote”)?

    我正在使用 Ruby on Rails 4 我想以 Rails 方式处理 JavaScript 事件 也就是说 例如 假设我有以下内容 link to destroy article path article method gt delet
  • 所有事件的 HTML5 EventSource 监听器?

    我使用 EventSource 在 JavaScript 客户端应用程序中推送通知 我可以像这样附加事件监听器 source addEventListener my custom event type function e console
  • AngularJS:选择非 2 路绑定到模型

    我正在使用选择来显示客户名称 用户应该能够选择现有客户端 然后更新范围属性 控制器 初始化 首选 if scope clients length gt 0 scope existingClient scope clients 0 View
  • 我需要一个 jQuery Autocomplete 使用 ajax 返回 id 和 name 的示例

    我需要一个示例 说明如何编写 jQuery 自动完成代码来填充product id 同时显示调用ajax 页面 remote php 的product name
  • 动态更改 vuejs 2 中的选择输入选项

    如何动态更改选择下拉 v model 中的选项 我有 2 个选择输入 其中一个应该根据其他输入进行更改 例如 如果我选择 水果 则选择显示水果 如果我选择 蔬菜 则选择显示蔬菜 我不使用Vuejs 但查看文档后 var TypesArr F
  • Intro.js 2页然后返回首页

    我在用intro js http introjs com 为我的网站创建一个小介绍 我希望游览从第 1 页 主页 2 另一页 然后回到第 1 页 主页 我已经成功地从第 1 2 页开始 但不确定如何让它返回到第 1 页 我对 javascr
  • 如何更改元素的 CSS 类并在单击时删除所有其他类

    我如何处理 AngularJS 2 中的一种情况 即单击一个元素需要更改其自己的样式 并且如果其他元素具有该样式 则需要将其删除 最好在一个函数中 如同Angular js 如何在单击时更改元素 css 类并删除所有其他元素 https s
  • Onblur 事件在另一个 div 的 onclick 之前触发

    如上所述 我有一个按钮 单击该按钮将打开子菜单 对于子菜单中的每个选项 都有三个元素 我认为实际上还有更多元素 但为了简单起见 将其保留为 3 我将焦点放在子菜单的主 div 白色 框架 上 Onblur 这个 div 然后我隐藏子菜单 这
  • JavaScript 中的最短路径

    几周来我一直在寻找一种在 JavaScript 中计算最短路径的方法 我一直在玩书数据结构和算法作者 格罗纳 Groner 名字恰如其分 https github com loiane javascript datastructs algo
  • 适用于多应用项目的 Grunt 和 requirejs 优化器

    我在让 Grunt 对具有以下结构的项目执行 requirejs 优化时遇到问题 static js apps app js dash js news js many more app files build collections lib
  • 在React组件中使用的字符串变量中插入html

    我正在为我的投资组合网站构建一个反应应用程序 目前我已经用 JSX 编写了应用程序 因此我可以添加以下内容 class Project extends React Component render return div h1 this pr
  • 什么是 TinyMCE jQuery 包?

    我被要求在项目中使用 TinyMCE 编辑器 在下载页面上 有一个主包 然后是一个 jQuery 包 This package contains special jQuery build of TinyMCE and a jQuery in
  • 在firefox上用js改变表单方法

    我需要使用 javascript jQuery 或纯 更改表单的方法属性 我的表单有 method post 我尝试用以下方法更改它 submit button click function var url input id url val
  • YouTube iFrame Player API 无法在 DOMWindow 上执行 postMessage

    我正在尝试使用以下命令将 youtube 加载到我的网页中YouTube iFrame Player API 并在加载时出现以下错误 Failed to execute postMessage on DOMWindow The target
  • 如何在 Twilio 可编程聊天中的单个通道上侦听消息

    Using twilio chat js https www npmjs com package twilio chat如何在单个频道上收听消息 我发现这个问题 https stackoverflow com questions 54687
  • JavaScript 中“键”的类型是什么?

    当我失去焦点并开始思考一个愚蠢的问题时 我遇到了这样的时刻 var a b value b 的类型是什么 我的意思不是 值 的类型 而是标记为 b 的实际键 背景 当我必须创建一个字符串键时 我开始想知道这一点 var a b value

随机推荐

  • 尝试使用 linq 转换数据[重复]

    这个问题在这里已经有答案了 我有以下类结构 public class TaskLog public DateTime LogDate get set public string Robot get set public string Tas
  • 联合内位域的对齐

    我对以下代码如何在内存中布局感到有点困惑 struct Thing union unsigned value 24 uint8 t bytes 3 Thing int v value v void foo printf Thing p va
  • WAMP 中不考虑更改 my.ini 文件上的 datadir

    我通常不会问这个问题 但我却用这个问题来撞墙 我正在尝试设置 WAMP 以与 Dropbox 配合使用 我已经使用过这两个教程 http mymediamagnet com how to setup wamp with dropbox ht
  • 云数据融合预览环境

    我们可以配置计算配置文件以在我创建的自定义集群上运行管道 但是对于预览 我无法指定计算配置文件 我需要使用一些自定义转换 这需要我在 data proc 集群上安装一些外部 jar 才能使代码正常工作 我想在使用 预览运行 部署代码之前对其
  • 使用驼峰路由提供静态文件

    我正在尝试在骆驼路线中提供静态文件 我的主类中的路由包含这段代码 public final void configure throws Exception declaring camel routes match on uri prefix
  • AJAX 提交之前的 jQuery 验证

    我有一个简单的注册表单 其中包含以下 jQuery 验证代码 document ready function registerForm validate rules Username required true minlength 6 Pa
  • Ember.js:查看监听按键事件

    在我的应用程序中 我有一个包含一些设置信息的面板 该面板通过单击按钮打开 关闭 但我也希望能够通过点击关闭它esc在键盘上 我的视图的代码如下所示 Social MainPanelView Ember View extend element
  • Android:保存试用申请信息

    我想保存一些有关试用版应用程序的信息 我希望此信息持久存在 以便检测用户是否删除了该应用程序并在试用期满后再次安装 存储此类信息的最佳位置是什么 thanks 大多数时候 这个问题的解决方案是进行服务器端检查 但如果您不想使用服务器 最好在
  • SQL - 删除电话号码中的括号

    我正在尝试从号码的区号中删除括号 我可以这样做 但是当我尝试连接两个 Replace 函数时 数字会重复 仅删除一个括号 这是我到目前为止所尝试的 SELECT HomePhone REPLACE HomePhone REPLACE Hom
  • Windows 和 Mono 上的 SQLite?

    读完问题后如何有条件地为 Mono 和 Microsoft NET 编译 C https stackoverflow com questions 329043 how can i conditionally compile my c sha
  • 将函数应用于 R 中的距离矩阵

    这个问题今天出现在 manipulatr 邮件列表中 http groups google com group manipulatr browse thread thread fbab76945f7cba3f 我正在改写 给定一个距离矩阵
  • 使用 setTimeout 提高响应能力

    当寻求提高页面性能时 我以前从未听说过的一项技术是使用 setTimeout 来防止 javascript 阻碍页面的呈现 例如 假设我们有一段特别耗时的 jQuery 内嵌在 html 中 input click function Do
  • Grails spring 安全重定向到错误的端口

    在我的 Grails 应用程序 2 3 11 中 我的登录页面将 Ajax 请求发送到 https myurl my app j spring security check https myurl my app j spring secur
  • 如何将值数组传递给 SudzC 生成的 Web 服务类?

    我有一个从 WSDL 生成的 sudzc 服务类 它接受 ArrayOfInt 和 ArrayOfString 对象作为参数 服务方法签名是这样的 SoapRequest Search id
  • 简单的 DOM 和
  • 我尝试了几种不同的方法 但似乎没有任何效果 我尝试了所有示例如何用简单的 HTML DOM 来模拟子选择器 https stackoverflow com questions 6831597 how to imitate child sel
  • ORM 与 CodeContracts 结合使用的实体 - 确保不变性

    我目前正在将 CodeContracts 添加到我现有的代码库中 事实证明困难的一件事是使用由 NHibernate 水合的实体 假设这个简单的类 public class Post private Blog blog Obsolete R
  • 是否可以使用从 Docker 内部构建的内核模块?

    我有一个需要为特定硬件构建的自定义内核模块 我想自动设置我的系统 因此我一直在容器化多个应用程序 我需要的东西之一就是这个内核模块 假设 Docker 容器中的内核头文件和主机上的内核版本完全相同 是否可以将整个构建过程容器化并允许主机使用
  • WCF:更改 ClientCredentials 会产生“此工厂启用手动寻址,因此发送的所有消息都必须预先寻址”。

    任何人都可以帮忙 我正在尝试通过通道工厂调用休息服务 但发送我的凭据 休息服务使用 Windows 身份验证 但通过以下代码 我得到 该工厂启用了手动寻址 因此发送的所有消息都必须预先寻址 使用 GetMessage 时出错 我知道我的服务
  • 为什么 Maven + Spring Boot 会创建巨大的 jar 文件?

    我有以下 Maven 项目结构 parent project main application domain models and repository module 1 module 2 module 3 以及以下简化的 POMS 父项目
  • 在JS中获取当前IP(无第三方服务)[重复]

    这个问题在这里已经有答案了 是否可以使用 WebRTC JS API 和 ICE 协议 公共 IP 为 STUN 获取客户端 IP 是的 您可以 使用 WebRTC JS API 和 ICE 协议 公共 IP 为 STUN 更多信息here