根据HttpServletRequest获取用户IP地址及判断当前IP是否是内网IP
最近项目上遇到了获取登录IP并判断是否是内网IP的需求,在此整理一下实现方法。
首先用户登录后,我们可以通过HttpServletRequest的request对象获取用户IP,但这些IP不一定是用户的真实IP。
下面是一些常见请求头:
X-Forwarded-For:Squid 服务代理
Proxy-Client-IP:apache 服务代理
WL-Proxy-Client-IP:weblogic 服务代理
HTTP_CLIENT_IP:有些代理服务器
X-Real-IP:nginx服务代理
通过对请求头的过滤,尽可能的获取真实IP:
String ip = request.getHeader("x-forwarded-for");if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getHeader("WL-Proxy-Client-IP");}if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {ip = request.getRemoteAddr();}
通过以上的方法可以得到当前用户的IP,接下来就需要判断此IP是否是内网IP。
内网IP通常是下面几个网段的IP,用户可以自己设置:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
确定了以上网段,接下来只需要做判断IP是否属于以上3个网段就行了:
public boolean isInner(String ip){String reg = "((192\\.168|172\\.([1][6-9]|[2]\\d|3[01]))"+ "(\\.([2][0-4]\\d|[2][5][0-5]|[01]?\\d?\\d)){2}|"+ "^(\\D)*10(\\.([2][0-4]\\d|[2][5][0-5]|[01]?\\d?\\d)){3})";Pattern p = Pattern.compile(reg);Matcher matcher = p.matcher(ip);return matcher.find();}
下面附上私有网段的正则表达式:
A类地址范围:10.0.0.0—10.255.255.255
正则表达式 ^10\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$B类地址范围:172.16.0.0---172.31.255.255
正则表达式 ^172\.(1[6789]|2[0-9]|3[01])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$C类地址范围:192.168.0.0---192.168.255.255
正则表达式 ^192\.168\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$
根据HttpServletRequest获取用户IP地址及判断当前IP是否是内网IP相关推荐
- windows 技术篇-判断某个ip地址相对于自己的主机是内网ip还是外网ip实例演示
写着来自本地局域网,就是相对应你主机的内网 ip. 如果换成来自其它地址,指的就是外网 ip. 喜欢的点个赞❤吧!
- 七月文章导读【TCP/IP相关】:解密 TCP/IP;什么是公网ip?什么是内网ip?为什么ip地址通常以192.168开头?
Table of Contents 解密 TCP/IP! TCP/IP是什么 网络分层 分层 封装 地址 端口 域名系统 分用 小结 什么是公网ip?什么是内网ip?为什么ip地址通常以192.168 ...
- 网吧局域网里的设置外网IP地址、设置内网IP地址、限制内网速度和路由器共享...
现在啊,网吧的需求越来越高,同时在经济比较充裕的情况下,作为网吧的老板可能希望打造全千兆的网吧,让每个进入网吧的人都能充分体验高速的感觉,当然更重要的是在同行竞争中处于上游,特别是对网络游戏爱好者的吸 ...
- 为什么ip地址通常以192.168开头?什么是公网ip?什么是内网ip?
我们的生活中常常要与ip地址接触,通常也会经常听到公网.内网?那什么是公网ip地址呢?什么是私网ip地址呢?为什么我们常见到的ip地址以192.168开头呢?我们今天来了解下. 内.外网是相对于防火墙 ...
- 阿里云服务器修改私网IP或内网IP地址的方法
阿里云服务器可以修改私网IP地址吗?可以,目前阿里云VPC专有网络类型的云服务器用户可以自定义修改ECS云服务器私网IP地址,不懂云分享阿里云服务器修改私网IP地址教程: 阿里云服务器修改私网IP地址 ...
- Dubbo host配置映射内网IP导致消费者无法连接到生产者提供的服务详解
环境:Cent OS 7.0 背景: 这篇文章的标题可以设置为如下几个,因为他都是同一个解决方法: (1)Dubbo注册zookepper时为什么会自动使用内网IP? (2)Dubbo消费者无法连接到 ...
- 公网ip和内网ip是什么?有什么区别?
凡是使用互联网上网的人一定会接触ip地址,然而ip地址又分内网(私有)ip和公网(外网)ip地址,那么你知道什么是公网ip和内网ip呢?公网ip和内网ip又有什么区别呢? 1.什么是公网ip和内网ip ...
- 什么是内网和外网?什么是内网IP和外网IP?本地连接和宽带连接又有什么区别?
今天,有很多小伙伴被何为内网外网迷糊?究竟什么是内网?什么是外网?他们又有和区别?还有什么是内网IP和外网IP?本地连接和宽带连接有什么区别?怂怂今天就来给大家科普一下吧: 问题一.何为内外网及定义诠 ...
- 内网IP与外网IP的区别
文章一: 原文:内网ip和外网ip的联系以及连接过程_Alexwym的博客-CSDN博客 我们每天都会访问各种各样的网站,比如淘宝,百度等等.不免会思考,我们的设备是如何连接上这些网址的呢?要想搞清楚 ...
- 如何查看外网ip_内网ip和外网ip的联系以及连接过程
我们每天都会访问各种各样的网站,比如淘宝,百度等等.不免会思考,我们的设备是如何连接上这些网址的呢?要想搞清楚这个问题,首先就得先搞清楚内网ip和外网ip的联系. 一.网络结构 如图,假设我们的计算机 ...
最新文章
- POJ 1321 棋盘问题 搜索
- 配置Apache2.2+PHP5+CakePHP1.2+MySQL5
- dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
- [Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法
- Flutter组件学习(二)—— Image
- WAS集群系列(5):集群搭建:步骤3:安装IHS软件
- 王道机试指南读后总结-6(动态规划等)
- 如何在 CentOS 中添加、启用和禁用一个仓库
- Swagger2-注解说明
- 【目标检测】Labelme的改进——海量图片的自动标注
- 计算机学院 统计学博士点,统计学 国家重点学科/博士点/硕士点
- python数字转换英文26字母_用python实现英文字母和相应序数转换的方法
- VUE 3文件上传 Change事件无效 和 unsupported media type 415
- java 矩阵求逆_详解用java描述矩阵求逆的算法
- 【excel】文本转数值的3个方法
- 如何使用Sketch绘制半个圆角矩形
- 2021AAPM大赛第一名技术报告Designing an Iterative Network for Fanbeam-CTwith Unknown Geometry 阅读笔记
- 惊闻母校徐兵老师英年早逝
- 笔记︱联邦学习与隐私计算的案例集锦(一)
- Week 5.1 | 左倾红黑树LLRB | Princeton Algorithms