Java的IP地址分析工具

package cn.GloomyH.NetTools;


import java.util.regex.Matcher;
import java.util.regex.Pattern;


/**
 * @author GloomyH
 */
public class IPv4Analyse {
public static void main(String []args){
IPv4Analyse analyse = new IPv4Analyse();
String ip = "23.1.11.2";
int a = 5;
System.out.println(analyse.IncludeIp("127.0.0.1-127.0.255.255", "127.0.23.1"));
}
/**
     * 判断IP地址是否在该网络
     * @return
     */
public boolean IPIsInNetwork(String subnetMask,String IP){
if( null != subnetMask && subnetMask.contains("/")){
return false;
}
String subNet = subnetMask.split("/")[0];
String subMask = subnetMask.split("/")[1];
Long tm_IP = (new Long(subNet))&(0xFFFFFFFF >>>(new Long(subMask)));
if(_IPStrToLong(IP)<_IPStrToLong(subNet) && _IPStrToLong(IP)> tm_IP){
return false;
}
return true;
}

/**
* IP从String类型转换为Long
* @param IP
* @return
*/
private long _IPStrToLong(String IP){
String IPPart[] = IP.split(".");
long result =0l;
int sub = 24;
for(String ip : IPPart){
result+=(new Long(ip)<<sub);
sub-=8;
}
return result;
}

/**
* 判断IP地址是否合法
* @param IPStr 127.0.0.1/24 | 127.0.0.1
* @return
*/
public boolean isIP(String IPStr){
if(null==IPStr || IPStr.length() < 7 || IPStr.length() > 18 )
     {
       return false;
     }
if(IPStr.indexOf("/")>0){
int mask = Integer.parseInt(IPStr.split("/")[1]);
if(mask <0 || mask >32){return false;}
IPStr = IPStr.split("/")[0];
}


String regex = "^(25[0-5]|[2][0-4]\\d|[0-1]?\\d?\\d)(\\.([25][0-5]|[2][0-4]\\d|[0-1]?\\d?\\d)){3}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(IPStr);
if(!matcher.find()){
return false;
}
return true;
}

/**
* 子网掩码转换String->Int
* @param mask
* @return
*/
public int maskStrToInt(String maskStr){
int mask = 0;
String tm[] = maskStr.split("\\.");
for(String t : tm){
if("255".equals(t)){
mask += 8;
}else{
String str =IntToBin(Integer.parseInt(t));
mask += str.indexOf("0");
return mask;
}
}
return mask;
}

/**
* 十进制转换为二进制
* @param num
* @return
*/
public String IntToBin(int num){
if(0==num){
return "00000000";
}
StringBuffer sb = new StringBuffer();
while(num>0){
sb.append(num%2);
num/=2;
}
return sb.reverse().toString();
}

/**
* 判断IP是否在子网内
* @param subIP 127.0.0.0/24
* @param IP 127.0.0.1
* @return
*/
public boolean isNetworkIP(String subIP,String IP){
Integer mask = 32-Integer.parseInt(subIP.split("/")[1]);
if((IPStrToLong(IP)>>mask)<<mask == IPStrToLong(subIP.split("/")[0])){
return true;
}
return false;


/**
* 判断ip是否在一个IP范围内容
* @param ip_pool 127.0.0.1-127.0.0.255
* @param ip 127.0.0.1
* @return
*/
public boolean IncludeIp(String ip_pool, String ip) {
if(null != ip_pool || null !=ip){
if(IPStrToLong(ip)>IPStrToLong(ip_pool.split("-")[0]) && IPStrToLong(ip)<IPStrToLong(ip_pool.split("-")[1])){
return true;
}
}
return false;
}

/**
* IP地址从String->Long
* @param IP 127.0.0.1
* @return
*/
public Long IPStrToLong(String IP){
String IPPart[] = IP.split("\\.");
long result = 0l;
int t = 24;
for(String ip :IPPart){
result+=(Long.parseLong(ip)<<t);
t-=8;
}
return result;
}

/**
* IP地址从Long->String
* @param IP
* @return
*/
public String IPLongToStr(Long IP){
StringBuffer sb =new StringBuffer();
sb.append((IP&0xFF000000)>>24);
sb.append(".");
sb.append((IP&0x00FF0000)>>16);
sb.append(".");
sb.append((IP&0x0000FF00)>>8);
sb.append(".");
sb.append(IP&0x000000FF);
return sb.toString();
}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值