js获取内网/局域网ip地址,操作系统,浏览器版本等信息
这次呢,说一下使用js获取用户电脑的ip信息,刚开始只是想获取用户ip,后来就顺带着获取了操作系统和浏览器信息。
先说下获取用户ip地址,包括像ipv4,ipv6,掩码等内容,但是大部分都要根据浏览器的支持情况来决定,目前主流浏览器对于ipv4的支持是统一的。第一种:用于仅支持IE的且允许Activex运行,利用ActiveObject来获取。这种的话可以选择性使用。第二种:利用其它平台的接口,在自己程序中使用如:新浪,太平洋等的接口,来给用户返回ip地址,这种是不太安全的方式,万一人家改变接口了呢?第三种(也是我采用的方式):使用WebRTC(Web Real-Time Communications),他的定义是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。当然这些信息和基本api在MDN上面是可以查看的。我们可以使用WebRTC获取ip地址,经测试,在chrome,opera,firefox,safari均可正常获取,对于IE和Edge,可以采用第一种方式进行兼容。下面是获取代码(我这里没有支持IE/Edge):
function getBrowserInfo(){var agent = navigator.userAgent.toLowerCase() ;console.log(agent);var arr = [];var system = agent.split(' ')[1].split(' ')[0].split('(')[1];arr.push(system);var regStr_edge = /edge\/[\d.]+/gi;var regStr_ie = /trident\/[\d.]+/gi ;var regStr_ff = /firefox\/[\d.]+/gi;var regStr_chrome = /chrome\/[\d.]+/gi ;var regStr_saf = /safari\/[\d.]+/gi ;var regStr_opera = /opr\/[\d.]+/gi;//IEif(agent.indexOf("trident") > 0){arr.push(agent.match(regStr_ie)[0].split('/')[0]);arr.push(agent.match(regStr_ie)[0].split('/')[1]);return arr;}//Edgeif(agent.indexOf('edge') > 0){arr.push(agent.match(regStr_edge)[0].split('/')[0]);arr.push(agent.match(regStr_edge)[0].split('/')[1]);return arr;}//firefoxif(agent.indexOf("firefox") > 0){arr.push(agent.match(regStr_ff)[0].split('/')[0]);arr.push(agent.match(regStr_ff)[0].split('/')[1]);return arr;}//Operaif(agent.indexOf("opr")>0){arr.push(agent.match(regStr_opera)[0].split('/')[0]);arr.push(agent.match(regStr_opera)[0].split('/')[1]);return arr;}//Safariif(agent.indexOf("safari") > 0 && agent.indexOf("chrome") < 0){arr.push(agent.match(regStr_saf)[0].split('/')[0]);arr.push(agent.match(regStr_saf)[0].split('/')[1]);return arr;}//Chromeif(agent.indexOf("chrome") > 0){arr.push(agent.match(regStr_chrome)[0].split('/')[0]);arr.push(agent.match(regStr_chrome)[0].split('/')[1]);return arr;}else{arr.push('请更换主流浏览器,例如chrome,firefox,opera,safari,IE,Edge!')return arr;}
}
其次是获取操作系统,浏览器信息:这里到没有那么麻烦,我使用了包含浏览器信息的Navigator对象,这个对象虽然没有公开标准,但是所有的浏览器都支持他,这就好办了。我们主要用到的是useragent属性,他包含了这些信息,我们要做的只是使用正则表达式分离和提取,针对不同的浏览器,兼容chrome,firefox,opera,ie,edge,safari等,对于其他浏览器,例如360极速等,会返回相应内核对应的浏览器名称。也可以再进行其他判断。下面是代码:
function getYourIP(){var RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;if (RTCPeerConnection) (function () {var rtc = new RTCPeerConnection({iceServers:[]});if (1 || window.mozRTCPeerConnection) { rtc.createDataChannel('', {reliable:false});};rtc.onicecandidate = function (evt) {if (evt.candidate) grepSDP("a="+evt.candidate.candidate);};rtc.createOffer(function (offerDesc) {grepSDP(offerDesc.sdp);rtc.setLocalDescription(offerDesc);}, function (e) { console.warn("offer failed", e); });var addrs = Object.create(null);addrs["0.0.0.0"] = false;function updateDisplay(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--;}}document.getElementById('list').textContent = displayAddrs[0];}function grepSDP(sdp) {var hosts = [];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);}});}})();else{document.getElementById('list').textContent = "请使用主流浏览器:chrome,firefox,opera,safari";}
}
用node内置系统模块os同步获取:
let getIP = function() {let interfaces = require("os").networkInterfaces();for (var devName in interfaces) {var iface = interfaces[devName];for (var i = 0; i < iface.length; i++) {let alias = iface[i];if (alias.family === "IPv4" &&alias.address !== "127.0.0.1" &&!alias.internal) {if (alias.address) {return alias.address;}}}}
};
参考链接:
js获取内网ip地址,操作系统,浏览器版本等信息
js获取内网/局域网ip地址,操作系统,浏览器版本等信息相关推荐
- android获取网卡ip地址吗,Native.js获取android有线网络IP地址
刚上手Native.js 请教问题如下: 想通过Native.js 获取Android有线网络IP地址,提示这一行console.log(en.hasMoreElements());报错: Uncau ...
- js获取内网ip地址,操作系统,浏览器版本等信息
这次呢,说一下使用js获取用户电脑的ip信息,刚开始只是想获取用户ip,后来就顺带着获取了操作系统和浏览器信息. 先说下获取用户ip地址,包括像ipv4,ipv6,掩码等内容,但是大部分都要根据浏览器 ...
- 前端Js获取本网IP和外网IP方法总汇
我们应该知道一台电脑需要两个ip才可以上网,一个是本地的内网ip(本地ip),另一个就是外网ip(公网ip).值得说明的是:外网ip具有世界范围的唯一性,而内网ip只在局域网内部具有唯一性.并且一个局 ...
- 利用python写一个自动获取局域网ip地址并开启服务器绕过校园网设备限制的小工具
前言 这个学年学校把宽带运营商从之前的联通大哥哥换成了如今的电信小弟弟,使用体验可谓一落千丈,最主要的原因是电信不再像联通提供拨号上网的账号和密码,改成了强制使用天翼校园的程序来进行认证上网,而且 ...
- 如何查看计算机在广域网的地址,如何知道本机当前局域网IP地址和广域网IP地址...
如何知道本机当前局域网IP地址和广域网IP地址 IP地址具有唯一性,每一个IP地址代表每一台电脑,IP地址等于电脑的名字,所以要了解自己电脑的IP地址是相当重要.IP地址大致分为两类:广域网(公网)I ...
- python --获取内网IP地址
方法一 import socketdef get_local_ip_address():ip_address = ''try:# 获取本机主机名hostname = socket.gethostnam ...
- 微课--Python获取局域网内所有机器IP地址与MAC地址
开学第一课:一定不要这样问老师Python问题 董付国老师Python系列教材推荐与选用参考 3000道Python习题免费在线练习 ============== 版权声明:由于公众号后台规则问题,本 ...
- xp系统怎么关dhcp服务器,怎样解决Win XP操作系统DHCP故障:获取未使用的IP地址
怎样解决Win XP操作系统DHCP故障:获取未使用的IP地址 发布时间:2011-05-12 14:57:29 作者:佚名 我要评论 在我们解决Windows 操作系统的DHCP故障时,有时 ...
- 查询局域网内在线电脑IP地址
将以下保存为"局域网中所有的在线IP.bat":(编码(E):ANSI,否则看到的是乱码) COLOR 0A CLS @ECHO Off Title 查询局域网内在线电脑IP :s ...
最新文章
- 图神经网络新课上架:​宾大2020秋季在线课程开课,视频上线B站
- AngularJS学习笔记(一)
- 介个杀手不太冷锁屏壁纸
- yelee主题修改博客左侧文章目录的按钮字体
- 如何测量上下文切换时间
- 使用腾讯云发送短信API接口实现(完整流程)
- 这个回答让我错失offer!offer拿到手软
- 【差分隐私组合定理,直方图,列联表代码实现】差分隐私代码实现系列(五)
- golang协程——通道channel阻塞
- app个人健康管理系统开源_开源会促进心理健康吗?
- Qlik助力新西兰最大私人医院提高病患护理水平
- python 元组和列表区别_Python基础教程,第三讲,列表和元组
- 求助:ATI HD3200 LINUX驱动
- 计算地球经纬度两点之间的弧长
- 019 [工具软件]窗体置顶 DeskPins
- 心动的本质是什么_喜欢上一个人的本质是什么?
- Cadence 软件快捷操作
- redmine插件安装
- 新的开始,fighting
- 互联网(internet)、因特网(Internet)、万维网(World Wide Web)三者区别