最近项目上遇到了获取登录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相关推荐

  1. windows 技术篇-判断某个ip地址相对于自己的主机是内网ip还是外网ip实例演示

    写着来自本地局域网,就是相对应你主机的内网 ip. 如果换成来自其它地址,指的就是外网 ip. 喜欢的点个赞❤吧!

  2. 七月文章导读【TCP/IP相关】:解密 TCP/IP;什么是公网ip?什么是内网ip?为什么ip地址通常以192.168开头?

    Table of Contents 解密 TCP/IP! TCP/IP是什么 网络分层 分层 封装 地址 端口 域名系统 分用 小结 什么是公网ip?什么是内网ip?为什么ip地址通常以192.168 ...

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

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

  4. 为什么ip地址通常以192.168开头?什么是公网ip?什么是内网ip?

    我们的生活中常常要与ip地址接触,通常也会经常听到公网.内网?那什么是公网ip地址呢?什么是私网ip地址呢?为什么我们常见到的ip地址以192.168开头呢?我们今天来了解下. 内.外网是相对于防火墙 ...

  5. 阿里云服务器修改私网IP或内网IP地址的方法

    阿里云服务器可以修改私网IP地址吗?可以,目前阿里云VPC专有网络类型的云服务器用户可以自定义修改ECS云服务器私网IP地址,不懂云分享阿里云服务器修改私网IP地址教程: 阿里云服务器修改私网IP地址 ...

  6. Dubbo host配置映射内网IP导致消费者无法连接到生产者提供的服务详解

    环境:Cent OS 7.0 背景: 这篇文章的标题可以设置为如下几个,因为他都是同一个解决方法: (1)Dubbo注册zookepper时为什么会自动使用内网IP? (2)Dubbo消费者无法连接到 ...

  7. 公网ip和内网ip是什么?有什么区别?

    凡是使用互联网上网的人一定会接触ip地址,然而ip地址又分内网(私有)ip和公网(外网)ip地址,那么你知道什么是公网ip和内网ip呢?公网ip和内网ip又有什么区别呢? 1.什么是公网ip和内网ip ...

  8. 什么是内网和外网?什么是内网IP和外网IP?本地连接和宽带连接又有什么区别?

    今天,有很多小伙伴被何为内网外网迷糊?究竟什么是内网?什么是外网?他们又有和区别?还有什么是内网IP和外网IP?本地连接和宽带连接有什么区别?怂怂今天就来给大家科普一下吧: 问题一.何为内外网及定义诠 ...

  9. 内网IP与外网IP的区别

    文章一: 原文:内网ip和外网ip的联系以及连接过程_Alexwym的博客-CSDN博客 我们每天都会访问各种各样的网站,比如淘宝,百度等等.不免会思考,我们的设备是如何连接上这些网址的呢?要想搞清楚 ...

  10. 如何查看外网ip_内网ip和外网ip的联系以及连接过程

    我们每天都会访问各种各样的网站,比如淘宝,百度等等.不免会思考,我们的设备是如何连接上这些网址的呢?要想搞清楚这个问题,首先就得先搞清楚内网ip和外网ip的联系. 一.网络结构 如图,假设我们的计算机 ...

最新文章

  1. POJ 1321 棋盘问题 搜索
  2. 配置Apache2.2+PHP5+CakePHP1.2+MySQL5
  3. dyld: Library not loaded: @rpath/Alamofire.framework/Alamofire
  4. [Medical Image Process] 3.4 Morphology Application—Watershed Algorithm 分水岭算法
  5. Flutter组件学习(二)—— Image
  6. WAS集群系列(5):集群搭建:步骤3:安装IHS软件
  7. 王道机试指南读后总结-6(动态规划等)
  8. 如何在 CentOS 中添加、启用和禁用一个仓库
  9. Swagger2-注解说明
  10. 【目标检测】Labelme的改进——海量图片的自动标注
  11. 计算机学院 统计学博士点,统计学 国家重点学科/博士点/硕士点
  12. python数字转换英文26字母_用python实现英文字母和相应序数转换的方法
  13. VUE 3文件上传 Change事件无效 和 unsupported media type 415
  14. java 矩阵求逆_详解用java描述矩阵求逆的算法
  15. 【excel】文本转数值的3个方法
  16. 如何使用Sketch绘制半个圆角矩形
  17. 2021AAPM大赛第一名技术报告Designing an Iterative Network for Fanbeam-CTwith Unknown Geometry 阅读笔记
  18. 惊闻母校徐兵老师英年早逝
  19. 笔记︱联邦学习与隐私计算的案例集锦(一)
  20. Week 5.1 | 左倾红黑树LLRB | Princeton Algorithms

热门文章

  1. True Liars (POJ - 1417)带权并查集+dp路径
  2. Pr 2019版安装教程
  3. 公共WiFi到底该不该连?
  4. Xmanager学习1_Xbrowser无法连接到Linux的解决办法
  5. 软件测试周刊(第10期): 大质量
  6. mp4视频在flash中边下载边播放
  7. Flask-mongoengine分页bug
  8. c语言12M345,ADXL345倾角传感器模块资料+单片机程序
  9. 美国交通模型发展前沿一览——Caliper年度通讯
  10. When Work Becomes a Game