通过RTCPeerConnection接口来获取用户的IP地址

2024-09-07 21:18

本文主要是介绍通过RTCPeerConnection接口来获取用户的IP地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

该方法在chrome78以上不再适用,想要获取真实IP可以通过后端获取,如果中间有nginx或者其他负载均衡会对真实IP隐藏的话,可以配置http的x-forwarded-for参数,具体请参考相关文章

RTCPeerConnection接口相当于一个由本地计算机到远端的WebRTC连接,接口提供了创建,保持,关闭连接的方法。
RTCPeerConnection.onicecandidate: 收到 icecandidate 事件时的事件处理器,当一个RTCDataChannel被添加到连接时,这个事件被触发。
RTCPeerConnection.createOffer(): 生成一个offer,它是一个带有特定的配置信息寻找远端匹配机器(peer)的请求,这个方法的前两个参数分别是方法调用成功以及失败的回调函数,可选的第三个参数是用户对视频流以及音频流的定制选项。
RTCPeerConnection.createDataChannel(): 建立一条数据通道,用于发送非音频视频消息
rtc.setLocalDescription(): 返回一个promise对象

var obj = {}function getIPAddress(callback) {var RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;if (RTCPeerConnection) {var rtc = new RTCPeerConnection({ iceServsers: [] });rtc.createDataChannel('', { reliable: false }); // 建立一条数据通道, 用于发送非音频视频消息rtc.onicecandidate = function (evt) { // 收到icecandidate事件时的事件处理器,当一个RTCDataChannel被添加到连接时,这个事件被触发if (evt.candidate) {grepSDP('a=' + evt.candidate.candidate);}};var addrs = Object.create(null);addrs['0.0.0.0'] = false;var grepSDP = function (sdp) {sdp.split('\r\n').forEach(function (line, index, arr) {if (~line.indexOf('a=candidate')) {var parts = line.split(' '),addr = parts[4],type = parts[7];if (type === 'host') {updateDisplay(addr);};} else if (~line.indexOf('c=')) {var parts = line.split(' '),addr = parts[2];updateDisplay(addr);}});};var updateDisplay = function (newAddr) {if (newAddr in addrs) {return;} else {addrs[newAddr] = true;}var displayAddrs = Object.keys(addrs).filter(function (k) {return addrs[k];});for (var i = 0; i < displayAddrs.length; i++) {if (displayAddrs[i].length > 16) {displayAddrs.splice(i, 1);i--;}}callback(displayAddrs[0]);};rtc.createOffer(function (offerDesc) { // 生成一个offer,带有特定的配置信息,寻找远端匹配机器的请求grepSDP(offerDesc.sdp);rtc.setLocalDescription(offerDesc);}, function (e) {throw new Error(e);});}};getIPAddress(function (data) {obj.ip = data;document.write(obj.ip);});

getIPAddress是异步函数,可以封装成promise,通过then的方式来得到返回数据

这篇关于通过RTCPeerConnection接口来获取用户的IP地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1146181

相关文章

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

webapp地址

F:\LSP\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

java线程深度解析(一)——java new 接口?匿名内部类给你答案

http://blog.csdn.net/daybreak1209/article/details/51305477 一、内部类 1、内部类初识 一般,一个类里主要包含类的方法和属性,但在Java中还提出在类中继续定义类(内部类)的概念。 内部类的定义:类的内部定义类 先来看一个实例 [html]  view plain copy pu

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

JS和jQuery获取节点的兄弟,父级,子级元素

原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素。 <div id="test"><div></div><div></div