JS获取本机IP地址的2种方法

目录

    • 1.获取本机IP地址方法1:
    • 2.获取本机IP地址方法2
    • 解决方案:

1.获取本机IP地址方法1:

if(typeof window != 'undefined'){var RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;if (RTCPeerConnection) (()=>{var rtc = new RTCPeerConnection()rtc.createDataChannel(''); //创建一个可以发送任意数据的数据通道rtc.createOffer( offerDesc => { //创建并存储一个sdp数据rtc.setLocalDescription(offerDesc)}, e => { console.log(e)})rtc.onicecandidate =(evt) => { //监听candidate事件if (evt.candidate) {console.log('evt:',evt.candidate)let ip_rule = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/var ip_addr = ip_rule.exec(evt.candidate.candidate)[1]console.log('ip_addr:',ip_addr)   //打印获取的IP地址}}})()else{console.log("没有找到")}
}

2.获取本机IP地址方法2

   //获取用户本地ip的方法
const getUserIP= (onNewIP)=> {let MyPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;let pc = new MyPeerConnection({iceServers: []});let noop = () => {};let localIPs = {};let ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g;let iterateIP = (ip) => {if (!localIPs[ip]) onNewIP(ip);localIPs[ip] = true;};pc.createDataChannel('');pc.createOffer().then((sdp) => {sdp.sdp.split('\n').forEach(function (line) {if (line.indexOf('candidate') < 0) return;line.match(ipRegex).forEach(iterateIP);});pc.setLocalDescription(sdp, noop, noop);}).catch((reason) => {});pc.onicecandidate = (ice) => {if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;ice.candidate.candidate.match(ipRegex).forEach(iterateIP);};
}getUserIP((ip) => {state.ip=ipconsole.log(ip)console.log(state.ip)});

如果电脑没获取到,基本上是因为浏览器限制了,解除方法如下:

解决方案:

火狐(FireFox) 删除隐藏IP

浏览器输入 about:config

搜索配置 media.peerconnection.enabled 改为false ( 刷新程序,IP正常显示 )

谷歌(Chrome) 删除隐藏IP

浏览器输入:chrome://flags/#enable-webrtc-hide-local-ips-with-mdns

把 Anonymize local IPs exposed by WebRTC 设置为 disabled ( 刷新程序,IP正常显示 )

eage浏览器删除隐藏ip

浏览器输入: edge://flags/#enable-webrtc-hide-local-ips-with-mdns

把 Anonymize local IPs exposed by WebRTC 设置为 disabled ( 刷新程序,IP正常显示 )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774303.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot中处理校验逻辑的两种方式:Hibernate Validator+全局异常处理

最近正在开发一个校园管理系统&#xff0c;需要对请求参数进行校验&#xff0c;比如说非空啊、长度限制啊等等&#xff0c;可选的解决方案有两种&#xff1a; 一种是用 Hibernate Validator 来处理一种是用全局异常来处理 两种方式&#xff0c;我们一一来实践体验一下。 一、…

AXI4-Stream Interconnect IP核(1)——原理

一、概述 AXI4-Stream Interconnect 是复杂片上系统&#xff08;SoC&#xff09;和现场可编程门阵列&#xff08;FPGA&#xff09;应用设计中的关键组件&#xff0c;它负责在系统内部不同模块之间路由数据流。AXI4-Stream协议是ARM引入的AMBA&#xff08;高级微控制器总线架构&…

httpClient使用介绍

HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新的版本和建议。 就是用来发送http请求或者解析http响应的。 导入依赖&#xff1a; <dependency…

插入排序和希尔排序:

插入排序 1. 算法思想&#xff1a; 由数组下标为1 开始的数值作为判断依据&#xff0c;与之前的数据从后往前比较定义tmp 暂存判断的数值&#xff0c;若前面的数据大于tmp&#xff0c;则将前面的数据向后移动 : arr[j1]arr[j]若对比的数据比tmp 大&#xff0c;则往后移&#…

Mysql中的执行计划怎么分析?

一、背景 在我们日常工作中&#xff0c;我们可能会遇到一些慢SQL语句或者要对一些SQL进行性能优化&#xff0c;那么就需要使用explain对SQL进行执行计划分析了。Mysql中的执行计划可以通过EXPLAIN或DESCRIBE关键字获取&#xff0c;当我们拿到执行计划后可以帮助我们分析这条sq…

JavaIO流与字节输出流OutputStream

1 概述 1.1 什么是IO流 IO流是存储和读取数据的解决方案&#xff0c;用于读写文件中的数据&#xff08;包括本地文件、网络等&#xff09; IO流的参照是程序或内存&#xff0c;即使程序在读&#xff0c;程序在写。 1.2 IO的分类 根据流的方向分为&#xff1a;输入流和输出流…

C++STL学习之unordered_map与unordered_set(底层Hash)

前言&#xff1a;我们前面已经学习论map和set&#xff0c;现在又冒出来一个unordered_map和unordered_set&#xff0c;这两个有啥差别吗&#xff1f;前面我们已经说过&#xff0c;map和set的底层是红黑树&#xff0c;那unordered_map和unordered_set的底层是什么呢&#xff1f;…

入门指南:使用Spark MLlib进行数据处理和机器学习

引言&#xff1a; 在当今大数据时代&#xff0c;数据处理和机器学习成为了许多企业和数据科学家的核心任务。然而&#xff0c;处理大规模数据和训练复杂的机器学习模型并不容易。幸运的是&#xff0c;Apache Spark提供了一个强大的机器学习库&#xff0c;即Spark MLlib&#xf…

esp32CAM环境搭建(arduino+MicroPython+thonny+固件)

arduino ide 开发工具 arduino版本&#xff1a;1.8.19 arduino ide 中文设置&#xff1a;​ file >> preferences >> ​ arduino IDE 获取 ESP32 开发环境&#xff1a;打开 Arduino IDE &#xff0c;找到 文件>首选项 ,将 ESP32 的配置链接填入附加开发板管理网…

TypeScript实战使用技巧分享

TypeScript使用分享 前言 本次技术分享是想将自己使用TypeScript&#xff08;TS&#xff09;的经验给大家做一个技术分享。主要目的是分享我使用TS的方式或者习惯&#xff0c;以及怎么在项目中更好的使用它&#xff0c;而不是对TS这门语言的学习。并非说需要大家都去这样写&a…

python --dejavu音频指纹识别

Dejavu是一个用于音频指纹识别的Python库&#xff0c;它能够将音频文件转换成独特的指纹&#xff0c;然后通过比对数据库中已知音频的指纹&#xff0c;识别出输入音频的来源或相似音频。Dejavu库支持多种类型的音频文件&#xff0c;包括MP3、WAV等&#xff0c;同时也支持在不同…

【Canvas与艺术】简约式胡萝卜配色汽车速度表

【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>胡萝卜色汽车速度仪表盘简化版</title><style type"…

go |struct embedding、generics、goroutine

go 的结构内嵌 注意点&#xff0c;有点像js func main() {fmt.Println("hello zhangbuda...")// 这个内嵌 和 js 有点像co : container{base: base{num: 22,},str: "zhangdbau hahahahah ",}fmt.Println("co: ", co)/*在 Go 语言中&#xff0c;如…

Linux学习第三天(gcc/g++的使用、gdb的使用)

1、gcc的四个阶段 预处理 预处理功能主要包括宏定义&#xff0c;文件包含&#xff0c;条件编译&#xff0c;去注释预处理指令是以#号开头的代码行例子&#xff1a;gcc -E hello.c -o hello.i选项&#xff1a;-E 该选项的作用是让gcc在预处理之后停止编译过程选项&#xff1a;-…

设置mysql 数据库和表 的编码方式UTF-8

要设置 MySQL 数据库表和字段的编码方式为 UTF-8&#xff0c;可以使用下面的SQL语句&#xff1a; 1. 设置数据库默认编码为 UTF-8&#xff1a; ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2. 创建表时指定编码为 UTF-8&#xff1a…

C# 值类型和引用类型

值类型 传递就是拷贝&#xff0c; a b意味着在内存里我讲b的所有复制了一份&#xff08;复制到a这里&#xff09; 类似C函数传实参 引用类型 传递的是地址 a b意味着我将a也指向了b所指向的内存 类似C函数传指针

2月京东天猫淘宝茗茶电商数据分析(茗茶行业未来趋势分析)

随着消费者对健康饮食和品质生活的追求&#xff0c;茗茶行业受到许多青睐和关注。 根据鲸参谋数据显示&#xff0c;今年2月&#xff0c;茗茶行业在某东平台上销售数据呈现出一种特殊的趋势。销售量总计约450万件&#xff0c;同比去年下滑了7%。&#xff1b;销售额总计6.4亿元&…

排查--[MySQL8.X 所占内存越来越大] 思路

简介 MySQL 是一个常用的关系型数据库管理系统&#xff0c;但是在使用过程中会出现占用内存过大的问题。本文将介绍解决这个问题的步骤&#xff0c;并提供相应的代码和说明。 解决步骤 下面是解决MySQL占用内存过大问题的步骤&#xff1a; erDiagramMySQL --|> 查找占用内存…

Android 开发中 Gradle 使用详解:构建、配置与优化技巧

文章目录 1. 基本概念2. 配置构建脚本2.1 项目级构建脚本2.2 模块级构建脚本 3. 自定义构建变体和应用 flavorDimensions4. 多模块项目4.1 创建模块4.2 配置模块依赖 5. 使用 Gradle 插件6. 使用 Gradle 命令 Gradle 是一种先进的构建工具&#xff0c;它被广泛应用于 Android 开…

Linux安装Maven

一、下载安装Maven 1.1 下载地址 官网下载地址: https://maven.apache.org/download.cgi 1.2 安装版本下载 进入下载页面选择需要的版本进行下载。 1.3 版本安装 将下载完的安装包&#xff0c;上传到Linux服务器上某个目录下&#xff0c;将其解压出来就好。 ## 创建安装…