Java tool class for processing IP, including converting long type IP to general IP type, converting xx.xx.xx.xx type to long type, obtaining mask based on mask bits, and calculating IP based on ip/mask bits Methods such as the starting IP of the segment and the ending IP of the IP segment based on the ip/mask bits can be used directly!
Copy the code code as follows:
package com.hh.test;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
/**
* IP tools
*
* @author bl
* @email [email protected]
*
*/
public class IPUtils
{
/**
* Convert long type IP to general IP type: xx.xx.xx.xx
*
* @param ip
* @return
*/
public static String getIpFromLong(Long ip)
{
String s1 = String.valueOf((ip & 4278190080L) / 16777216L);
String s2 = String.valueOf((ip & 16711680L) / 65536L);
String s3 = String.valueOf((ip & 65280L) / 256L);
String s4 = String.valueOf(ip & 255L);
return s1 + "." + s2 + "." + s3 + "." + s4;
}
/**
* Convert xx.xx.xx.xx type to long type
*
* @param ip
* @return
*/
public static Long getIpFromString(String ip)
{
Long ipLong = 0L;
String ipTemp = ip;
ipLong = ipLong * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipLong = ipLong * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipLong = ipLong * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipLong = ipLong * 256 + Long.parseLong(ipTemp);
return ipLong;
}
/**
* Get the mask based on the mask bits
*
* @param maskBit
* Number of mask digits, such as "28", "30"
* @return
*/
public static String getMaskByMaskBit(String maskBit)
{
return StringUtils.isEmpty(maskBit) ? "error, maskBit is null !"
: maskBitMap().get(maskBit);
}
/**
* Calculate the starting IP of the IP segment based on the ip/mask bits, such as IP string 218.240.38.69/30
*
* @param ip
* Given IP, such as 218.240.38.69
* @param maskBit
* Given mask bits, such as 30
* @return String representation of starting IP
*/
public static String getBeginIpStr(String ip, String maskBit)
{
return getIpFromLong(getBeginIpLong(ip, maskBit));
}
/**
* Calculate the starting IP of the IP segment based on the ip/mask bits, such as IP string 218.240.38.69/30
*
* @param ip
* Given IP, such as 218.240.38.69
* @param maskBit
* Given mask bits, such as 30
* @return Long integer representation of the starting IP
*/
public static Long getBeginIpLong(String ip, String maskBit)
{
return getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Calculate the termination IP of the IP segment based on the ip/mask bits, such as IP string 218.240.38.69/30
*
* @param ip
* Given IP, such as 218.240.38.69
* @param maskBit
* Given mask bits, such as 30
* @return String representation of the termination IP
*/
public static String getEndIpStr(String ip, String maskBit)
{
return getIpFromLong(getEndIpLong(ip, maskBit));
}
/**
* Calculate the ending IP of the IP segment based on the ip/mask bits, such as IP string 218.240.38.69/30
*
* @param ip
* Given IP, such as 218.240.38.69
* @param maskBit
* Given mask bits, such as 30
* @return Long integer representation of the termination IP
*/
public static Long getEndIpLong(String ip, String maskBit)
{
return getBeginIpLong(ip, maskBit)
+ ~getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Convert to mask bits according to the subnet mask, such as 255.255.255.252, which is converted to mask bits 30
*
* @param netmarks
* @return
*/
public static int getNetMask(String netmarks)
{
StringBuffer sbf;
String str;
int inetmask = 0, count = 0;
String[] ipList = netmarks.split("//.");
for (int n = 0; n < ipList.length; n++)
{
sbf = toBin(Integer.parseInt(ipList[n]));
str = sbf.reverse().toString();
count = 0;
for (int i = 0; i < str.length(); i++)
{
i = str.indexOf('1', i);
if (i == -1)
{
break;
}
count++;
}
inetmask += count;
}
return inetmask;
}
/**
* Calculate subnet size
*
* @param netmask
*Mask bits
* @return
*/
public static int getPoolMax(int maskBit)
{
if (maskBit <= 0 || maskBit >= 32)
{
return 0;
}
return (int) Math.pow(2, 32 - maskBit) - 2;
}
private static StringBuffer toBin(int x)
{
StringBuffer result = new StringBuffer();
result.append(x % 2);
x /= 2;
while(x>0)
{
result.append(x % 2);
x /= 2;
}
return result;
}
/*
* Stores all mask bits and corresponding mask key:mask bit value:mask (xxxx)
*/
private static Map<String, String> maskBitMap()
{
Map<String, String> maskBit = new HashMap<String, String>();
maskBit.put("1", "128.0.0.0");
maskBit.put("2", "192.0.0.0");
maskBit.put("3", "224.0.0.0");
maskBit.put("4", "240.0.0.0");
maskBit.put("5", "248.0.0.0");
maskBit.put("6", "252.0.0.0");
maskBit.put("7", "254.0.0.0");
maskBit.put("8", "255.0.0.0");
maskBit.put("9", "255.128.0.0");
maskBit.put("10", "255.192.0.0");
maskBit.put("11", "255.224.0.0");
maskBit.put("12", "255.240.0.0");
maskBit.put("13", "255.248.0.0");
maskBit.put("14", "255.252.0.0");
maskBit.put("15", "255.254.0.0");
maskBit.put("16", "255.255.0.0");
maskBit.put("17", "255.255.128.0");
maskBit.put("18", "255.255.192.0");
maskBit.put("19", "255.255.224.0");
maskBit.put("20", "255.255.240.0");
maskBit.put("21", "255.255.248.0");
maskBit.put("22", "255.255.252.0");
maskBit.put("23", "255.255.254.0");
maskBit.put("24", "255.255.255.0");
maskBit.put("25", "255.255.255.128");
maskBit.put("26", "255.255.255.192");
maskBit.put("27", "255.255.255.224");
maskBit.put("28", "255.255.255.240");
maskBit.put("29", "255.255.255.248");
maskBit.put("30", "255.255.255.252");
maskBit.put("31", "255.255.255.254");
maskBit.put("32", "255.255.255.255");
return maskBit;
}
/**
* Get the mask based on the mask bits
*
* @param masks
* @return
*/
@Deprecated
public static String getMaskByMaskBit(int masks)
{
String ret = "";
if (masks == 1)
ret = "128.0.0.0";
else if (masks == 2)
ret = "192.0.0.0";
else if (masks == 3)
ret = "224.0.0.0";
else if (masks == 4)
ret = "240.0.0.0";
else if (masks == 5)
ret = "248.0.0.0";
else if (masks == 6)
ret = "252.0.0.0";
else if (masks == 7)
ret = "254.0.0.0";
else if (masks == 8)
ret = "255.0.0.0";
else if (masks == 9)
ret = "255.128.0.0";
else if (masks == 10)
ret = "255.192.0.0";
else if (masks == 11)
ret = "255.224.0.0";
else if (masks == 12)
ret = "255.240.0.0";
else if (masks == 13)
ret = "255.248.0.0";
else if (masks == 14)
ret = "255.252.0.0";
else if (masks == 15)
ret = "255.254.0.0";
else if (masks == 16)
ret = "255.255.0.0";
else if (masks == 17)
ret = "255.255.128.0";
else if (masks == 18)
ret = "255.255.192.0";
else if (masks == 19)
ret = "255.255.224.0";
else if (masks == 20)
ret = "255.255.240.0";
else if (masks == 21)
ret = "255.255.248.0";
else if (masks == 22)
ret = "255.255.252.0";
else if (masks == 23)
ret = "255.255.254.0";
else if (masks == 24)
ret = "255.255.255.0";
else if (masks == 25)
ret = "255.255.255.128";
else if (masks == 26)
ret = "255.255.255.192";
else if (masks == 27)
ret = "255.255.255.224";
else if (masks == 28)
ret = "255.255.255.240";
else if (masks == 29)
ret = "255.255.255.248";
else if (masks == 30)
ret = "255.255.255.252";
else if (masks == 31)
ret = "255.255.255.254";
else if (masks == 32)
ret = "255.255.255.255";
return ret;
}
}