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

相关文章

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

Java对接Dify API接口的完整流程

《Java对接DifyAPI接口的完整流程》Dify是一款AI应用开发平台,提供多种自然语言处理能力,通过调用Dify开放API,开发者可以快速集成智能对话、文本生成等功能到自己的Java应用中,本... 目录Java对接Dify API接口完整指南一、Dify API简介二、准备工作三、基础对接实现1.

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Java根据IP地址实现归属地获取

《Java根据IP地址实现归属地获取》Ip2region是一个离线IP地址定位库和IP定位数据管理框架,这篇文章主要为大家详细介绍了Java如何使用Ip2region实现根据IP地址获取归属地,感兴趣... 目录一、使用Ip2region离线获取1、Ip2region简介2、导包3、下编程载xdb文件4、J