这次呢,说一下使用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 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";}
}

  其次是获取操作系统,浏览器信息:这里到没有那么麻烦,我使用了包含浏览器信息的Navigator对象,这个对象虽然没有公开标准,但是所有的浏览器都支持他,这就好办了。我们主要用到的是useragent属性,他包含了这些信息,我们要做的只是使用正则表达式分离和提取,针对不同的浏览器,兼容chrome,firefox,opera,ie,edge,safari等,对于其他浏览器,例如360极速等,会返回相应内核对应的浏览器名称。也可以再进行其他判断。下面是代码:

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

用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地址,操作系统,浏览器版本等信息相关推荐

  1. python --获取内网IP地址

    方法一 import socketdef get_local_ip_address():ip_address = ''try:# 获取本机主机名hostname = socket.gethostnam ...

  2. js获取内网/局域网ip地址,操作系统,浏览器版本等信息

    这次呢,说一下使用js获取用户电脑的ip信息,刚开始只是想获取用户ip,后来就顺带着获取了操作系统和浏览器信息. 先说下获取用户ip地址,包括像ipv4,ipv6,掩码等内容,但是大部分都要根据浏览器 ...

  3. [网络]_获取内外网IP地址【Auto.js】

    auto(); console.show();importClass('java.net.Inet4Address'); importClass('java.net.InetAddress'); im ...

  4. Android 获取局域网内网IP地址

    Android 获取局域网内网IP地址 废话 上代码 完事 废话 拿局域网IP一般用在tcp通讯或udp通讯上,下次再整理下这类通讯的框架 上代码 /*** 网络工具* 获得局域网IP地址* @aut ...

  5. 前端Js获取本网IP和外网IP方法总汇

    我们应该知道一台电脑需要两个ip才可以上网,一个是本地的内网ip(本地ip),另一个就是外网ip(公网ip).值得说明的是:外网ip具有世界范围的唯一性,而内网ip只在局域网内部具有唯一性.并且一个局 ...

  6. php获取本机内网ip地址

    内网ip只能用于内部通信,而不能与其它网络互连.在tcp/ip协议中,专门保留了三个网段作为私有网段地址.分别如下: 10.0.0.0/8: 10.0.0.0~10.255.255.255 172.1 ...

  7. 网吧局域网里的设置外网IP地址、设置内网IP地址、限制内网速度和路由器共享...

    现在啊,网吧的需求越来越高,同时在经济比较充裕的情况下,作为网吧的老板可能希望打造全千兆的网吧,让每个进入网吧的人都能充分体验高速的感觉,当然更重要的是在同行竞争中处于上游,特别是对网络游戏爱好者的吸 ...

  8. 局域网固定内网IP地址的方法(亲测有效)

    公司有十来台电脑,想要做文件共享,但是碍于内网IP经常变动共享文件很不方便. 网上查了一些资料,局域网中的电脑ip若不是设置固定的话,一般都是动态获取的ip,若是需要固定ip,那要如何设置呢? 经过本 ...

  9. 使用JS获取客户端的IP地址

    使用JS获取客户端的IP地址 搜狐IP地址查询接口(可设置编码):https://pv.sohu.com/cityjson?ie=utf-8 简单使用: <script src="ht ...

最新文章

  1. 百变冰冰!手把手教你实现CVPR2021最新妆容迁移算法
  2. 编写程序,统计一个长度为2的字符串在另一个字符串中出现的次数
  3. jsp页面间的传值方法
  4. 速卖通代运营收费标准,什么样的商家适合找代运营公司
  5. SQLyog连接虚拟机中docker中的mysql过程详解,并解决2003错误
  6. Bootstrap4+MySQL前后端综合实训-Day02-PM【新闻管理后台(登录页面、首页)、#left>a:nth-child(4) {}】
  7. python中的import详解_如何在python中import
  8. framset和fram的嵌套
  9. android span的用法,android – 如何使用TextAppearanceSpan
  10. (原创)EDK中常用文件
  11. Windows API一日一练(60)CreateIoCompletionPort和GetQueuedCompletionStatus函数
  12. MyBatis学习总结——调用存储过程
  13. Linux系统管理——账号管理与权限及归属管理实例
  14. java读取ifc文件_IFC文件解析
  15. okhttp返回内容乱码_tomcat服务器接口返回的数据乱码
  16. 计算机四级题库百度云资源,计算机四级题库
  17. 425_PICkit2烧写PIC18F4580 MCU
  18. 用Python实现QQ找茬游戏外挂工具
  19. 百度网盘Mac客户端无法上传和下载问题解决办法
  20. Delphi Math单元函数

热门文章

  1. 算法:一个小人通过有鳄鱼的河
  2. matlab三个简单物理建模实例(笔记)
  3. autojs autoxjs text 选不中 失效 uiselector
  4. 安装caffe中间遇到的一些问题
  5. Win8安装Rational Rose教程
  6. 程序猿真的觉得写代码比女朋友重要吗?
  7. 挑战程序设计竞赛——详解DFS及BFS
  8. “狗屁不通文章生成器”项目登顶GitHub热榜~
  9. HTML和CSS中的图像与背景图像
  10. 苹果在高端手机市场碾压安卓手机,国产旗舰不入前十