IP 限制规则

来源:互联网 发布:支持mac的大型网游 编辑:程序博客网 时间:2024/05/10 18:30

这些天正好工作时,需要用到这个功能,写完后还是觉得拿出来和大家分享下。。。

/**
 * 判断访问者IP 是否符合规则
 *
 * @author ganjianwu @live.cn*
 */
public class ConversionIP {

 /**
  *
  * @param ip
  *            访问者IP
  * @param configip
  *            ip规则,每个IP必须以逗号隔开
  * @return
  */
 public boolean conversion(String ip, String[] configip) {
  boolean b = false;
  String s = "*";
  for (int i = 0; i < configip.length; i++) {
   // 判断该个IP中是否存在“*”号
   if (0 > configip[i].indexOf(s)) {
    b = singleip(ip, configip[i]);
   } else {
    b = xinhaoip(ip, configip[i]);
   }
   if (b) {
    break;
   }
  }
  return b;
 }

 /**
  * ip地址转成整数.
  *
  * @param ip
  *            访问者ip
  * @return
  */
 public long ipTOlong(String ip) {
  String[] longip = ip.split("[.]");
  long num = 16777216 * Integer.parseInt(longip[0]) + 65536
    * Integer.parseInt(longip[1]) + 256
    * Integer.parseInt(longip[2]) + Integer.parseInt(longip[3]);
  return num;
 }

 /**
  * 单个ip段的ip限制
  *
  * @param ip
  *            访问者ip
  * @param configip
  *            ip规则,每个IP必须以逗号隔开
  * @return
  */
 public boolean singleip(String ip, String configip) {
  boolean b = configip.equals(ip);
  return b;
 }

 /**
  * 区域段的ip限制,即带有“*”的ip段
  *
  * @param ip
  *            访问者ip
  * @param configip
  *            ip规则,每个IP必须以逗号隔开
  * @return
  */
 public boolean xinhaoip(String ip, String configip) {
  boolean b = false;
  long longip = ipTOlong(ip);
  long ip_begin = ipTOlong(configip.replaceAll("//*", "1"));
  long ip_end = ipTOlong(configip.replaceAll("//*", "255"));
  if (ip_begin <= longip && ip_end >= longip) {
   b = true;
  }
  return b;
 }
}

 

其实只要注意一点,要搞明白IP是什么?其实IP就是一组32位的二进制,明白了这个就简单了,

我们就可以将IP转换为long,这样就可与你IP规则中的IP区段进行比较了。

大家如果有什么更好的办法,也可以告知于我。。。谢谢!!!