当前位置: 首页 > news >正文

js获取客户端本地ip

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

使用js获取客户端本地ip,不需要额外引入别的文件

注:若IE浏览器不进行安全设置,IE浏览器会默认拦截ActiveX控件的使用,将不会返回客户端的IP地址】

下边的代码使用于通用浏览器,但是IE浏览器必须去设置ActiveX控件。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>获取客户端IP</title>
</head>
<body>
	<div></div>
</body>
<script type="text/javascript">
function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs
      //compatibility for firefox and chrome
      var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
      var pc = new myPeerConnection({
         iceServers: []
     }),
     noop = function() {},
     localIPs = {},
     ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,
     key;
 
     function iterateIP(ip) {
         if (!localIPs[ip]) onNewIP(ip);
         localIPs[ip] = true;
    }
 
      //create a bogus data channel
     pc.createDataChannel("");
 
     // create offer and set local description
     pc.createOffer().then(function(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(function(reason) {
         // An error occurred, so handle the failure to connect
     });
 
     //sten for candidate events
     pc.onicecandidate = function(ice) {
         if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;
         ice.candidate.candidate.match(ipRegex).forEach(iterateIP);
     };
}
 
// Usage
 
getUserIP(function(ip){
     alert("Got IP! :" + ip);
});

</script>
</html>

代码放上就能用。

转载于:https://my.oschina.net/lixiaoyan/blog/3005320

相关文章:

  • 「小程序JAVA实战」小程序视频播放的时候生命周期的控制(56)
  • oracle中无法用退格和上下翻命令解决
  • 我发起并创立了一个 Javascript 前端库 开源项目 jWebForm
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • C# 8新提案让泛型Attribute成为现实
  • v-if和v-for连用出现的问题
  • 导入javax.servlet。伺服登记无法解决:The import javax.servlet.MultipartConfigElement cannot be resolved...
  • 与柯尼塞格达成合作后 恒大或将继续瞄准中高端新能源车
  • eclipse 插件编写(一)(转)
  • 深入浅出Tomcat/3 - Tomcat生命周期
  • mybatis 学习总结笔记Day2
  • 5.3Python函数(三)
  • 基于LSTM的情感识别在鹅漫评论分析中的实践与应用
  • Docker学习笔记_安装和使用nginx
  • React Transition Group -- Transition 组件
  • 〔开发系列〕一次关于小程序开发的深度总结
  • AWS实战 - 利用IAM对S3做访问控制
  • C++入门教程(10):for 语句
  • css属性的继承、初识值、计算值、当前值、应用值
  • express如何解决request entity too large问题
  • js中的正则表达式入门
  • Laravel Mix运行时关于es2015报错解决方案
  • PHP变量
  • python 装饰器(一)
  • vue 个人积累(使用工具,组件)
  • vue-router的history模式发布配置
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • windows下使用nginx调试简介
  • 闭包--闭包作用之保存(一)
  • 京东美团研发面经
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 如何解决微信端直接跳WAP端
  • 如何选择开源的机器学习框架?
  • 使用Gradle第一次构建Java程序
  • 想写好前端,先练好内功
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #LLM入门|Prompt#3.3_存储_Memory
  • $(function(){})与(function($){....})(jQuery)的区别
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (¥1011)-(一千零一拾一元整)输出
  • (11)MSP430F5529 定时器B
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)EOS中账户、钱包和密钥的关系
  • (转)fock函数详解
  • .cn根服务器被攻击之后
  • .NET Micro Framework初体验(二)
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .NET基础篇——反射的奥妙
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .sh 的运行
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually