您现在的位置是:首页 > 正文

js html 发布内网,如何在不联网情况下在前端使用js拿到用户内网IP。。。

2024-02-29 11:09:13阅读 1

问题描述

如何在不联网情况下,使用js拿到客户端内网IP并且支持ie浏览器!

问题出现的环境背景及自己尝试过哪些方法

从网上找了很多方法已经试过了。

1.在Chrome已经使用过webrtc-ips方法,但是不知道是什么原因,还是拿不到,并且该方法不支持ie。

2.解决webrtc-ips拿不到ip的问题时,也使用了webrtc-ips插件,作者本人的demo就不能拿到。。。

3.使用过搜狐,腾讯的ip支持,但是必须联网才能获取到。

相关代码

// 网上唯一的webrtc-ips方法,这个也拿不到ip?

Demo for:

https://github.com/diafygi/webrtc-ips

This demo secretly makes requests to STUN servers that can log your

request. These requests do not show up in developer consoles and

cannot be blocked by browser plugins (AdBlock, Ghostery, etc.).

Your local IP addresses:
Your public IP addresses:

//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

if(!RTCPeerConnection){

//create an iframe node

var iframe = document.createElement('iframe');

iframe.style.display = 'none';

//invalidate content script

iframe.sandbox = 'allow-same-origin';

//insert a listener to cutoff any attempts to

//disable webrtc when inserting to the DOM

iframe.addEventListener("DOMNodeInserted", function(e){

e.stopPropagation();

}, false);

iframe.addEventListener("DOMNodeInsertedIntoDocument", function(e){

e.stopPropagation();

}, false);

//insert into the DOM and get that iframe's webrtc

document.body.appendChild(iframe);

var win = iframe.contentWindow;

RTCPeerConnection = win.RTCPeerConnection

|| win.mozRTCPeerConnection

|| win.webkitRTCPeerConnection;

useWebKit = !!win.webkitRTCPeerConnection;

}

//minimal requirements for data connection

var mediaConstraints = {

optional: [{RtpDataChannels: true}]

};

//firefox already has a default stun server in about:config

// media.peerconnection.default_iceservers =

// [{"url": "stun:stun.services.mozilla.com"}]

var servers = undefined;

//add same stun server for chrome

if(useWebKit)

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})/

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);

}

//insert IP addresses into the page

getIPs(function(ip){

var li = document.createElement("li");

li.textContent = ip;

//local IPs

if (ip.match(/^(192\.168\.|169\.254\.|10\.|172\.(1[6-9]|2\d|3[01]))/))

document.getElementsByTagName("ul")[0].appendChild(li);

//assume the rest are public IPs

else

document.getElementsByTagName("ul")[1].appendChild(li);

});

你期待的结果是什么?实际看到的错误信息又是什么?

上述代码会报错:pc.localDescription.sdp undefined,打印出来pc.localDescription为null。

麻烦各位帮忙看一下。

最后: 如何在不联网情况下在前端使用js拿到用户内网IP,并且支持ie!

网站文章

  • python的IO操作

    python的IO操作;内存缓存;磁盘IO;网络IO; pandas 操作Excel;openpyxl保存图片;QImage缓存;pyqtgraph导出图片;

    2024-02-29 11:08:43
  • 小程序也能接广告了,微信小程序广告位投放指南! 热门推荐

    小程序也能接广告了,微信小程序广告位投放指南! 热门推荐

      小程序也能接广告了,微信小程序广告位投放指南!  3月15日消息,据爆料,微信已经开始秘密测试在小程序中投放广告,并且流传出了一份《微信小程序广告位投放指引》,意味着微信小程序已经准备开启广告投放...

    2024-02-29 11:08:36
  • 第1章第2节练习题20 连接两个循环单链表

    有两个循环单链表,链表头指针分别为h1和h2,编写一个函数将链表h2连接到链表h1之后,要求链表后的链表仍保持循环链表的形式

    2024-02-29 11:08:29
  • 如何写一个简单的爬虫程序

    如何写一个简单的爬虫程序

    1.首先给爬虫程序找到储存路径 2.按住shift和右键,选择在此处打开Powershell窗口(s) 3.在窗口内输入scrapy(杀毒软件可能会阻止程序运行,不要选择阻止!!!如果不小心选择了阻止...

    2024-02-29 11:08:02
  • Linux系统文件编程及文件读、写操作

    Linux系统文件编程及文件读、写操作

    为什么会用到文件操作?账单游戏进度读取配置文件等以上操作在实际的应用中都会用得到由此我们引出了如何实现文件的创建、打开编辑等的自动化执行操作Windows手动编辑文件(以world为例):1.打开/创...

    2024-02-29 11:07:53
  • 7-Zip 官网被百度认定为恶意网站

    7-Zip 官网被百度认定为恶意网站

    来自:OS开源社区链接:https://www.oschina.net/news/253666首页代码中有恶意的代码?网友评论:窜不窜改我不知道,但手机edge浏览器打开你这页面就“无响应”了。没ht...

    2024-02-29 11:07:45
  • gensim中word2vec python源码理解(一)初始化构建单词表

    gensim中word2vec python源码理解(一)初始化构建单词表

    本文主要谈一谈对gensim包中封装的word2vec python源码中,使用Hierarchical Softmax构建单词表部分代码的理解。

    2024-02-29 11:07:14
  • 边缘光 rim

    边缘光 rim

    边缘光在游戏中是很常用到的,比如角色受到攻击,模型边缘会有一圈红色的边框,这些都是边缘光得到的奇妙效果。下图展现了边缘光的效果边缘关的原理如下图所示代码如下图[csharp] view plain copyShader "Custom/Rim" {      Properties {  

    2024-02-29 11:07:08
  • matplotlib 画图笔记 柱状图、曲线图、box图

    matplotlib 画图笔记 柱状图、曲线图、box图

    import matplotlib.pyplot as plt import numpy as np from matplotlib.backends.backend_pdf import PdfPa...

    2024-02-29 11:07:01
  • 算法与数据结构

    算法与数据结构

    文章目录算法数据结构算法复杂度数据结构1、前言2、数组3、链表4、栈5、队列6、树7、图8、散列表9、堆动态规划搜索与回溯算法分治算法排序查找算法双指针位运算数学模拟算法数据结构算法: 动态规划、回溯...

    2024-02-29 11:06:54