通过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

相关文章

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

Python中使用正则表达式精准匹配IP地址的案例

《Python中使用正则表达式精准匹配IP地址的案例》Python的正则表达式(re模块)是完成这个任务的利器,但你知道怎么写才能准确匹配各种合法的IP地址吗,今天我们就来详细探讨这个问题,感兴趣的朋... 目录为什么需要IP正则表达式?IP地址的基本结构基础正则表达式写法精确匹配0-255的数字验证IP地

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa