控制ip范围内访问(转)

通过ipIsValid方法来验证用户ip是否在指定范围内,获取用户ip:

String localIp = StringUtil.getIpAddr(request);

if(ipIsValid("192.168.100.1-192.168.100.255", localIp) || ipIsValid("200.100.192.0-200.100.192.20", localIp)) {
    system.out.println("在ip范围内,可以访问!");
} else {
    system.out.println("不在ip范围内,不可以访问!");
}

/**
	 * 检测用户ip是否在指定ip范围内
	 * @param string
	 * @param localIp
	 * @return
	 */
	private boolean ipIsValid(String ipSection, String ip) {
		
		if (ipSection == null)
		   throw new NullPointerException("IP段不能为空!");
		  if (ip == null)
		   throw new NullPointerException("IP不能为空!");
		  ipSection = ipSection.trim();
		  ip = ip.trim();
		  final String REGX_IP = "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])";
		  final String REGX_IPB = REGX_IP + "\\-" + REGX_IP;
		  if (!ipSection.matches(REGX_IPB) || !ip.matches(REGX_IP))
			  return false;
		  int idx = ipSection.indexOf('-');
		  String[] sips = ipSection.substring(0, idx).split("\\.");
		  String[] sipe = ipSection.substring(idx + 1).split("\\.");
		  String[] sipt = ip.split("\\.");
		  long ips = 0L, ipe = 0L, ipt = 0L;
		  for (int i = 0; i < 4; ++i) {
			  ips = ips << 8 | Integer.parseInt(sips[i]);
			  ipe = ipe << 8 | Integer.parseInt(sipe[i]);
			  ipt = ipt << 8 | Integer.parseInt(sipt[i]);
		  }
		  if (ips > ipe) {
			   long t = ips;
			   ips = ipe;
			   ipe = t;
		  }
		  return ips <= ipt && ipt <= ipe;
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值