关闭

Java的IP地址分析工具

344人阅读 评论(0) 收藏 举报
分类:
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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1028次
    • 积分:90
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类