`
keepwork
  • 浏览: 333647 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
开发者博客:http://www.developsearch.com

/**
 * ip地址辅助类
 * 
 * @author chenxin
 * @version [版本号, 2012-5-21]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
public class IPUtil {


    /**
	 * 获取request的IP
	 * @param request
	 * @return
	 */
	public static String getRequestIP(HttpServletRequest request) {
		String ip = null;
		if (request != null) {
			// 如果登录提供的IP地址为空则取request的IP
			ip = request.getHeader("iv-remote-address");
			if (ip == null) {
				ip = request.getRemoteAddr();
			}
		}
		return ip;
	}


	public static String getIPBinaryString(String IPStr){
		String[] IPStrArray = IPStr.split("\\.");	
		int IPStr1 = Integer.parseInt(IPStrArray[0]);
		int IPStr2 = Integer.parseInt(IPStrArray[1]);
		int IPStr3 = Integer.parseInt(IPStrArray[2]);
		int IPStr4 = Integer.parseInt(IPStrArray[3]);
		String IPBS=Integer.toBinaryString(IPStr1)+" "+Integer.toBinaryString(IPStr2)+" "+Integer.toBinaryString(IPStr3)+" "+Integer.toBinaryString(IPStr4);
		return IPBS;
	}
	
	//将127.0.0.1形式的IP地址转换成十进制整数,这里没有进行任何错误处理   
    public static long IP2Long(String IPStr){   
    	if(!isValidateIP(IPStr)){
    		throw new RuntimeException("无效的IP地址!");
    	}
        long[] ip = new long[4];   
        String[] IPStrArray = IPStr.split("\\.");	
		int IPStr1 = Integer.parseInt(IPStrArray[0]);
		int IPStr2 = Integer.parseInt(IPStrArray[1]);
		int IPStr3 = Integer.parseInt(IPStrArray[2]);
		int IPStr4 = Integer.parseInt(IPStrArray[3]);  
        //将每个.之间的字符串转换成整型   
        ip[0] = Long.parseLong(IPStrArray[0]);   
        ip[1] = Long.parseLong(IPStrArray[1]);   
        ip[2] = Long.parseLong(IPStrArray[2]);   
        ip[3] = Long.parseLong(IPStrArray[3]);   
        return (ip[0] << 24) + (ip[1] << 16) + (ip[2] << 8) + ip[3];   
    }   
    
  //将IP地址十进制整数转化成二进制,这里没有进行任何错误处理   
    public static String Long2Binary(long longIP){   
        return Long.toBinaryString(longIP);   
    } 
       
    //将十进制整数形式转换成127.0.0.1形式的ip地址   
    public static String Long2IP(long longIP){   
        StringBuffer sb = new StringBuffer("");   
        //直接右移24位   
        sb.append(String.valueOf((longIP >>> 24)));   
        sb.append(".");   
        //将高8位置0,然后右移16位   
        sb.append(String.valueOf((longIP & 0x00FFFFFF) >>> 16));   
        sb.append(".");   
        //将高16位置0,然后右移8位   
        sb.append(String.valueOf((longIP & 0x0000FFFF) >>> 8));   
        sb.append(".");   
        //将高24位置0   
        sb.append(String.valueOf((longIP & 0x000000FF)));   
        return sb.toString();   
    } 
	
    /**
     * 判断IP地址是否有效?
     * @param customIP 需要校验的IP地址
     * @return 结果
     */
	public static boolean isValidateIP(String customIP){
		//String regex = "^(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)$";
		//String regex = "([1-9]|[1-9]\\d|1\\d{2}|2[0-1]\\d|22[0-3])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}";
		String regex = "^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$";
		Pattern p = Pattern.compile(regex);   
		Matcher m = p.matcher(customIP);   
		String val = null;   
		while (m.find()){   
			val = m.group();   
//		      System.out.println("MATCH: " + val);   
			return true;
		}   
		if (val == null) {   
//		      System.out.println("NO MATCHES: ");  
			return false;
		}   
		return false;
	}
	
	/**
	 * 校验客户端IP地址是否在有效的地址段内
	 * @param customIP 客户端IP
	 * @param fromIP1 IP起始段1
	 * @param toIP1 IP结束段1
	 * @param fromIP2 IP起始段2
	 * @param toIP2 IP结束段2
	 * @param fromIP3 IP起始段3
	 * @param toIP3 IP结束段3
	 * @return
	 */
	public static boolean isAllowedIP(String customIP,String fromIP1,String toIP1,String fromIP2,String toIP2,String fromIP3,String toIP3){
		System.out.println("_customIP is "+customIP);
		long _customIP = 0;
		long _fromIP1 = 0;
		long _toIP1 = 0;
		long _fromIP2 = 0;
		long _toIP2 = 0;
		long _fromIP3 = 0;
		long _toIP3 = 0;
		boolean _result = false;
		
		//当客户端IP地址是有效的
		if(customIP!=null&&isValidateIP(customIP)){
			_customIP = IP2Long(customIP);

			//当第一校验IP地址段有效
			if(fromIP1!=null&&toIP1!=null&&isValidateIP(fromIP1)&& isValidateIP(toIP1)){
				_fromIP1 = IP2Long(fromIP1);
				_toIP1 = IP2Long(toIP1);
				if(_fromIP1<_toIP1){
					if(_customIP>=_fromIP1 && _customIP<=_toIP1){
						_result = true;
					}
				}else{
					if(_customIP<=_fromIP1 && _customIP>=_toIP1){
						_result = true;
					}
				}
			}
			//当第二校验IP地址段有效
			if(fromIP2!=null&&toIP2!=null&&isValidateIP(fromIP2)&& isValidateIP(toIP2)){
				_fromIP2 = IP2Long(fromIP2);
				_toIP2 = IP2Long(toIP2);
				if(_fromIP2<_toIP2){
					if(_customIP>=_fromIP2 && _customIP<=_toIP2){
						_result = true;
					}
				}else{
					if(_customIP<=_fromIP2 && _customIP>=_toIP2){
						_result = true;
					}
				}
			}
			//当第三校验IP地址段有效
			if(fromIP3!=null&&toIP3!=null&&isValidateIP(fromIP3)&& isValidateIP(toIP3)){
				_fromIP3 = IP2Long(fromIP3);
				_toIP3 = IP2Long(toIP3);
				if(_fromIP3<_toIP3){
					if(_customIP>=_fromIP3 && _customIP<=_toIP3){
						_result = true;
					}
				}else{
					if(_customIP<=_fromIP3 && _customIP>=_toIP3){
						_result = true;
					}
				}
			}
		}
		return _result;
	}
	
	public static void main(String[] args){
		String IPStr = "192.9.200.1"; 
		String maskStr = "255.255.255.0";
		String IPStrBinary = IPUtil.getIPBinaryString(IPStr);
		String maskStrBinary = IPUtil.getIPBinaryString(maskStr);
		System.out.println(IPStrBinary);
		System.out.println(maskStrBinary);
		
		
//		System.out.println(IPUtil.IP2Long(IPStr));
//		System.out.println(IPUtil.IP2Long(maskStr));
//		System.out.println(IPUtil.Long2Binary(IPUtil.IP2Long(IPStr)));
//		System.out.println(IPUtil.Long2Binary(IPUtil.IP2Long(maskStr)));
		
		String ip1 = "255.255.255.255";
//		System.out.println(IPUtil.IP2Long(ip1));
//		System.out.println(IPUtil.Long2Binary(IPUtil.IP2Long(ip1)));
		
//		System.out.println(IPUtil.isValidateIP("192.168.72.59"));
		
		System.out.println("result is "+IPUtil.isAllowedIP("192.168.72.59", "192.168.72.1", "192.168.72.255", null,null,null,null));
	}


}
分享到:
评论

相关推荐

    iputil工具代码

    从给定的文件信息来看,我们正在探讨的是一个名为`IpUtil`的Java类,它主要功能是实现IP地址(IPv4)与十进制整数之间的相互转换。这一工具在许多网络编程场景中非常实用,例如在网络设备管理、网络安全、IP地址池...

    IpUtil工具类--通过request获取IP,通过IP获取地址

    IpUtil工具类--通过request获取IP,通过IP获取地址(需要联网,调用淘宝的IP库)。使用场景:在网站开发记录用户增删改查日志的时候,往往需要记录操作人的IP地址,来准确的生成操作日志记录等

    IPUtil获取ip与MAC工具类

    通过Request 解析ip地址以及MAC地址工具类

    IPUtil.java

    IPUtil.java

    android获取公网ip地址 IPUtil.java

    通过异步任务来获取当前用户的ip地址,使用的时候调用getRemoteIP方法就可以,需要传一个可以获取公网ip的url地址,这个百多很多,比如,搜狐,淘宝之类的都有,同时还有一个超时的任务,具体看代码了

    Java-IpUtil通过请求获取IP信息的工具类

    内容概要:要工具类将接口请求解析以获取请求的IP地址信息。内含Ip2regionSearcher工具类的使用方式,可以通过使用Ip2regionSearcher将获取到的IP地址信息,进一步解析得到IP属地信息。 适应人群:有需要获取请求IP...

    IpUtil.java

    进行ip的获取

    根据ip获取对应城市.rar

    2. "IPUtil.java":这是Java源代码文件,很可能包含了实现IP地址解析和查询城市信息的主要逻辑。在这个类中,开发者可能使用了某种API或者数据库查询方法来实现IP到城市映射的功能。 3. "data.zip":这是一个数据...

    JAVA_IP自动递增和加密

    在Java中,可以编写一个自定义工具类,如`IpUtil.java`,来实现IP地址的递增功能。这个类可能包含一个方法,接受一个IP字符串,然后返回一个新的IP,IP地址的最后一个数字增加1。 ```java public class IpUtil { ...

    java各种工具类:精确的数学运算、将String进行base64编码解码、树的递归、判断是否为空等

    ArithmeticUtils、Base64Util、BitConverterUtil、BuildTreeFor1077、CaculateDistanceUtil、CloseUtil、ConvertUtil、CoordinateTransformUtil...GetGpsInPtsUtil、GsonUtils、HashUtil、IpUtil、IpUtils、JsonUtil、JWTUtil、...

    ip、mac标准格式转换工具(java)

    在给定的`IpUtil.java`和`MacUtil.java`文件中,我们可以推测它们包含了处理这两种地址的实用工具类。这些类可能包含了将IP地址和MAC地址进行转换、校验和操作的函数。 在`IpUtil.java`中,我们可能会看到以下功能...

    jmp.zip_jmp

    “IPSeeker.java”可能更侧重于IP地址信息的查找和处理,而“IpUtil.java”则可能提供更底层的IP地址操作方法,如IP地址的转换和比较。这样细分的功能设计,既保证了类的职责单一,也便于不同需求的开发者各取所需。...

    根据IP地址获取ip所在区域.rar

    在IT行业中,网络通信是至关重要的部分,而与之紧密...在Java环境中,这通常涉及网络请求、JSON解析等技术,而"IpUtil"可能正是实现这一功能的关键工具。理解并掌握这种技术对于网络编程和数据分析等领域具有重要意义。

    工具类-获取访问ip地址工具类,自用留存

    在`IpUtil.java`这个文件中,可能包含了上述知识点的实现。具体代码会包含一些关键函数,如`getClientIp(HttpServletRequest request)`,用于从HTTP请求中提取IP地址;或者`getLocalIpAddress()`,用于获取本地机器...

    java脚本开发根据客户IP获取IP的具体地理位置信息

    public class IpUtil { public static String getRealIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase...

    Java获取登录用户的IP地址示例代码.rar

    public class IPUtil { public static String getIpAddress(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown"....

    iputils, iputils软件包是用于Linux网络的小型实用实用程序.zip

    iputils, iputils软件包是用于Linux网络的小型实用实用程序 iputils软件包是用于Linux网络的小型实用实用程序。这些工具包括在iputils中arpingclockdiffipgpingrarpdrdisctftpdtracepathtraceroute6

Global site tag (gtag.js) - Google Analytics