开发者博客: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工具类--通过request获取IP,通过IP获取地址(需要联网,调用淘宝的IP库)。使用场景:在网站开发记录用户增删改查日志的时候,往往需要记录操作人的IP地址,来准确的生成操作日志记录等
通过Request 解析ip地址以及MAC地址工具类
IPUtil.java
通过异步任务来获取当前用户的ip地址,使用的时候调用getRemoteIP方法就可以,需要传一个可以获取公网ip的url地址,这个百多很多,比如,搜狐,淘宝之类的都有,同时还有一个超时的任务,具体看代码了
进行ip的获取
内容概要:要工具类将接口请求解析以获取请求的IP地址信息。内含Ip2regionSearcher工具类的使用方式,可以通过使用Ip2regionSearcher将获取到的IP地址信息,进一步解析得到IP属地信息。 适应人群:有需要获取请求IP...
ArithmeticUtils、Base64Util、BitConverterUtil、BuildTreeFor1077、CaculateDistanceUtil、CloseUtil、ConvertUtil、CoordinateTransformUtil...GetGpsInPtsUtil、GsonUtils、HashUtil、IpUtil、IpUtils、JsonUtil、JWTUtil、...
iputils, iputils软件包是用于Linux网络的小型实用实用程序 iputils软件包是用于Linux网络的小型实用实用程序。这些工具包括在iputils中arpingclockdiffipgpingrarpdrdisctftpdtracepathtraceroute6
java_utils常用工具类打包,欲善其事必先利其器,本资源内容为Java开发常用工具类打包,如BeanUtil,ArrayUtil,HtmlUtil,ClassUtil,DateUtil,FileUtil,FontUtil,ImageUtil,IOUtil, IPUtil, MapUtil,MailUtil,...
资源内容:工欲善其事必先利其器,本资源内容为Java开发常用工具类打包,如BeanUtil,ArrayUtil,HtmlUtil,ClassUtil,DateUtil,FileUtil,FontUtil,ImageUtil,IOUtil, IPUtil, MapUtil,MailUtil, NumberUtil,...
资源内容:工欲善其事必先利其器,本资源内容为Java开发常用工具类打包,如BeanUtil,ArrayUtil,HtmlUtil,ClassUtil,DateUtil,FileUtil,FontUtil,ImageUtil,IOUtil, IPUtil, MapUtil,MailUtil, NumberUtil,...
资源内容:工欲善其事必先利其器,本资源内容为Java开发常用工具类打包,如BeanUtil,ArrayUtil,HtmlUtil,ClassUtil,DateUtil,FileUtil,FontUtil,ImageUtil,IOUtil, IPUtil, MapUtil,MailUtil, NumberUtil,...
资源内容:工欲善其事必先利其器,本资源内容为Java开发常用工具类打包,如BeanUtil,ArrayUtil,HtmlUtil,ClassUtil,DateUtil,FileUtil,FontUtil,ImageUtil,IOUtil, IPUtil, MapUtil,MailUtil, NumberUtil,...
资源内容:工欲善其事必先利其器,本资源内容为Java开发常用工具类打包,如BeanUtil,ArrayUtil,HtmlUtil,ClassUtil,DateUtil,FileUtil,FontUtil,ImageUtil,IOUtil, IPUtil, MapUtil,MailUtil, NumberUtil,...
资源内容:工欲善其事必先利其器,本资源内容为Java开发常用工具类打包,如BeanUtil,ArrayUtil,HtmlUtil,ClassUtil,DateUtil,FileUtil,FontUtil,ImageUtil,IOUtil, IPUtil, MapUtil,MailUtil, NumberUtil,...
资源内容:工欲善其事必先利其器,本资源内容为Java开发常用工具类打包,如BeanUtil,ArrayUtil,HtmlUtil,ClassUtil,DateUtil,FileUtil,FontUtil,ImageUtil,IOUtil, IPUtil, MapUtil,MailUtil, NumberUtil,...