这次呢,说一下使用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):

  1. function getYourIP(){
  2. var RTCPeerConnection = window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection;
  3. if (RTCPeerConnection) (function () {
  4. var rtc = new RTCPeerConnection({iceServers:[]});
  5. if (1 || window.mozRTCPeerConnection) {
  6. rtc.createDataChannel('', {reliable:false});
  7. };
  8.  
  9. rtc.onicecandidate = function (evt) {
  10. if (evt.candidate) grepSDP("a="+evt.candidate.candidate);
  11. };
  12. rtc.createOffer(function (offerDesc) {
  13. grepSDP(offerDesc.sdp);
  14. rtc.setLocalDescription(offerDesc);
  15. }, function (e) { console.warn("offer failed", e); });
  16.  
  17. var addrs = Object.create(null);
  18. addrs["0.0.0.0"] = false;
  19. function updateDisplay(newAddr) {
  20. if (newAddr in addrs) return;
  21. else addrs[newAddr] = true;
  22. var displayAddrs = Object.keys(addrs).filter(function (k) { return addrs[k]; });
  23. for(var i = 0; i < displayAddrs.length; i++){
  24. if(displayAddrs[i].length > 16){
  25. displayAddrs.splice(i, 1);
  26. i--;
  27. }
  28. }
  29. document.getElementById('list').textContent = displayAddrs[0];
  30. }
  31.  
  32. function grepSDP(sdp) {
  33. var hosts = [];
  34. sdp.split('\r\n').forEach(function (line, index, arr) {
  35. if (~line.indexOf("a=candidate")) {
  36. var parts = line.split(' '),
  37. addr = parts[4],
  38. type = parts[7];
  39. if (type === 'host') updateDisplay(addr);
  40. } else if (~line.indexOf("c=")) {
  41. var parts = line.split(' '),
  42. addr = parts[2];
  43. updateDisplay(addr);
  44. }
  45. });
  46. }
  47. })();
  48. else{
  49. document.getElementById('list').textContent = "请使用主流浏览器:chrome,firefox,opera,safari";
  50. }
  51. }

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

  1. function getBrowserInfo(){
  2. var agent = navigator.userAgent.toLowerCase() ;
  3. console.log(agent);
  4. var arr = [];
  5. var system = agent.split(' ')[1].split(' ')[0].split('(')[1];
  6. arr.push(system);
  7. var regStr_edge = /edge\/[\d.]+/gi;
  8. var regStr_ie = /trident\/[\d.]+/gi ;
  9. var regStr_ff = /firefox\/[\d.]+/gi;
  10. var regStr_chrome = /chrome\/[\d.]+/gi ;
  11. var regStr_saf = /safari\/[\d.]+/gi ;
  12. var regStr_opera = /opr\/[\d.]+/gi;
  13. //IE
  14. if(agent.indexOf("trident") > 0){
  15. arr.push(agent.match(regStr_ie)[0].split('/')[0]);
  16. arr.push(agent.match(regStr_ie)[0].split('/')[1]);
  17. return arr;
  18. }
  19. //Edge
  20. if(agent.indexOf('edge') > 0){
  21. arr.push(agent.match(regStr_edge)[0].split('/')[0]);
  22. arr.push(agent.match(regStr_edge)[0].split('/')[1]);
  23. return arr;
  24. }
  25. //firefox
  26. if(agent.indexOf("firefox") > 0){
  27. arr.push(agent.match(regStr_ff)[0].split('/')[0]);
  28. arr.push(agent.match(regStr_ff)[0].split('/')[1]);
  29. return arr;
  30. }
  31. //Opera
  32. if(agent.indexOf("opr")>0){
  33. arr.push(agent.match(regStr_opera)[0].split('/')[0]);
  34. arr.push(agent.match(regStr_opera)[0].split('/')[1]);
  35. return arr;
  36. }
  37. //Safari
  38. if(agent.indexOf("safari") > 0 && agent.indexOf("chrome") < 0){
  39. arr.push(agent.match(regStr_saf)[0].split('/')[0]);
  40. arr.push(agent.match(regStr_saf)[0].split('/')[1]);
  41. return arr;
  42. }
  43. //Chrome
  44. if(agent.indexOf("chrome") > 0){
  45. arr.push(agent.match(regStr_chrome)[0].split('/')[0]);
  46. arr.push(agent.match(regStr_chrome)[0].split('/')[1]);
  47. return arr;
  48. }else{
  49. arr.push('请更换主流浏览器,例如chrome,firefox,opera,safari,IE,Edge!')
  50. return arr;
  51. }
  52. }

  好了,这次的分享就到这里,谢谢你的阅读,如果有什么不对或者更好的方式请您提出宝贵的意见,或者您有什么问题也可以评论,我会尽力为您解答,再次感谢您的关注!!

  若要发布在网上或者转载的话请注上原文地址:

  作者:铁柱成针

  原文地址:http://www.cnblogs.com/zgh-blog/p/jsGetIPAndBrowserInfo.html

js获取ip地址,操作系统,浏览器版本等信息,可兼容的更多相关文章

  1. js获取IP地址方法总结_转

    js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338.html 1,js取得IP地址 ...

  2. js获取IP地址多种方法实例教程

    js获取IP地址方法总结   js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338. ...

  3. js获取IP地址方法总结

    js代码获取IP地址的方法,如何在js中取得客户端的IP地址.原文地址:js获取IP地址的三种方法 http://www.jbxue.com/article/11338.html 1,js取得IP地址 ...

  4. .NET获取客户端的操作系统、IP地址、浏览器版本

    获取客户端的操作系统: #region 获取操作系统版本号 /// <summary> /// 获取操作系统版本号 /// </summary> /// <returns ...

  5. js获取IP地址的方法小结

    s代码获取IP地址的三种方法,在js中取得客户端的IP地址. 原文地址:http://www.jbxue.com/article/11338.html 1,js取得IP地址的方法一 <scrip ...

  6. 通过主机名(域名)获取IP地址,主机别名等信息

    一.所用API函数介绍 struct hostent FAR*gethostbyname( const char FAR* name ); 传入參数:const char FAR* name.主机名或 ...

  7. js获取ip地址

    方法三(所有的平台及浏览器):使用的搜狐接口 <script src="http://pv.sohu.com/cityjson?ie=utf-8"></scrip ...

  8. (转)js获取内网ip地址,操作系统,浏览器版本等信息

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

  9. (效果五)js获取客户端ip地址及浏览器信息

    在前端开发的时候,有时候为了测试需要得到访问客户的ip地址.虽说是后端来做的,但是我们前端也可以完成. 先说下获取用户ip地址,包括像ipv4,ipv6,掩码等内容,但是大部分都要根据浏览器的支持情况 ...

随机推荐

  1. __main() 和 main() 【转】

    因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可 ...

  2. THINKPHP 3.2 PHP SFTP上传下载 代码实现方法

     一.SFTP介绍:使用SSH协议进行FTP传输的协议叫SFTP(安全文件传输)Sftp和Ftp都是文件传输协议.区别:sftp是ssh内含的协议(ssh是加密的telnet协议),  只要sshd服 ...

  3. jmeter之beanshell提取json数据

    Jmeter BeanShell PostProcessor提取json数据 假设现有需求: 提取sample返回json数据中所有name字段对应的值,返回的json格式如下: {“body”:{“ ...

  4. Jsp运行环境——Tomcat

    JSP JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1] 是由Sun Microsystems公司倡导.许多公司参与一起建立的 ...

  5. 简单设置android启动画面

    1.新建Activity,以及layout文件夹里的xml文件2.将新建Activity在AndroidManifest中设为默认Activity,并且添加:android:theme="@ ...

  6. jvm系列 (二) ---垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 前言:本文基于<深入java虚拟机>再加上个人的理解以及其他相关资料,对内容进行整理浓缩总结.本文中的图来自网络,感谢图的作者.如果有不正确的地方,欢迎指出. 目 ...

  7. 一小时学会ECMAScript6新特性

    ECMAScript 简介 简称es,是一套标准,javascript就是使用这套标准的语言.主流的浏览器使用的是ECAMScript5,ECAMScript6(ECAMScript2015)是一涛新 ...

  8. Python网络数据采集3-数据存到CSV以及MySql

    Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...

  9. [补档]暑假集训D2总结

    %dalao https://hzoi-mafia.github.io/2017/07/26/17/ (纪念我已死去的github) 大佬AntiLeaf来讲概率&期望,然后--成功变为 不可 ...

  10. metasploit快速入门

    今天没上班,在小黑屋里看了一个一百多页的书<metasploit新手指南>,在此将笔记分享给大家.欢迎大家批评指正,共同学习进步.     metasploit新手指南 笔记 kali 0 ...