Класс инструмента Java для обработки IP, включая преобразование IP длинного типа в общий тип IP, преобразование типа xx.xx.xx.xx в длинный тип, получение маски на основе битов маски и вычисление IP на основе битов ip/маски. Такие методы, как начальный IP-адрес сегмента и конечный IP-адрес IP-сегмента на основе битов ip/маски могут использоваться напрямую!
Скопируйте код кода следующим образом:
пакет com.hh.test;
импортировать java.util.HashMap;
импортировать java.util.Map;
импортировать org.apache.commons.lang3.StringUtils;
/**
* IP-инструменты
*
* @author бл
* @электронная почта [email protected]
*
*/
публичный класс IPUtils
{
/**
* Преобразование IP-адреса длинного типа в общий тип IP: xx.xx.xx.xx.
*
* @парам ip
* @возвращаться
*/
общедоступная статическая строка getIpFromLong (длинный IP-адрес)
{
String s1 = String.valueOf((ip & 4278190080L) / 16777216L);
String s2 = String.valueOf((ip & 16711680L) / 65536L);
String s3 = String.valueOf((ip & 65280L) / 256L);
Строка s4 = String.valueOf(ip & 255L);
возврат s1 + "." + s2 + "." + s3 + "."
}
/**
* Преобразование типа xx.xx.xx.xx в длинный тип.
*
* @парам ip
* @возвращаться
*/
общедоступный статический Long getIpFromString (String ip)
{
Длинный ipLong = 0L;
Строка 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);
вернуть ipLong;
}
/**
* Получить маску на основе битов маски
*
* @param MaskBit
* Количество цифр маски, например «28», «30».
* @возвращаться
*/
общедоступная статическая строка getMaskByMaskBit (String MaskBit)
{
return StringUtils.isEmpty(maskBit) ? "ошибка, маска_бит имеет значение null!"
: MaskBitMap().get(maskBit);
}
/**
* Рассчитать начальный IP-адрес IP-сегмента на основе битов IP/маски, например IP-строки 218.240.38.69/30.
*
* @парам ip
* Учитывая IP, например 218.240.38.69.
* @param MaskBit
* Учитывая биты маски, например 30
* @return Строковое представление стартового IP-адреса
*/
общедоступная статическая строка getBeginIpStr (String ip, String MaskBit)
{
return getIpFromLong(getBeginIpLong(ip, MaskBit));
}
/**
* Рассчитать начальный IP-адрес IP-сегмента на основе битов IP/маски, например IP-строки 218.240.38.69/30.
*
* @парам ip
* Учитывая IP, например 218.240.38.69.
* @param MaskBit
* Учитывая биты маски, например 30
* @return Длинное целое представление начального IP-адреса
*/
public static Long getBeginIpLong (String ip, String MaskBit)
{
return getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Вычисление конечного IP-адреса IP-сегмента на основе битов IP/маски, например IP-строки 218.240.38.69/30.
*
* @парам ip
* Учитывая IP, например 218.240.38.69.
* @param MaskBit
* Учитывая биты маски, например 30
* @return Строковое представление IP-адреса завершения
*/
общедоступная статическая строка getEndIpStr (String ip, String MaskBit)
{
return getIpFromLong(getEndIpLong(ip, MaskBit));
}
/**
* Вычисление конечного IP-адреса IP-сегмента на основе битов IP/маски, например IP-строки 218.240.38.69/30.
*
* @парам ip
* Учитывая IP, например 218.240.38.69.
* @param MaskBit
* Учитывая биты маски, например 30
* @return Длинное целое представление IP-адреса завершения
*/
public static Long getEndIpLong (String ip, String MaskBit)
{
вернуть getBeginIpLong(ip, MaskBit)
+ ~getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Преобразование в биты маски в соответствии с маской подсети, например 255.255.255.252, которая преобразуется в биты маски 30.
*
* @param сетевые метки
* @возвращаться
*/
public static int getNetMask (строковые метки)
{
StringBuffer сбф;
Строка ул;
int inetmask = 0, count = 0;
String[] ipList = netmarks.split("//.");
for (int n = 0; n <ipList.length; n++)
{
sbf = toBin(Integer.parseInt(ipList[n]));
стр = sbf.reverse().toString();
счет = 0;
for (int i = 0; i <str.length(); i++)
{
я = str.indexOf('1', я);
если (я == -1)
{
перерыв;
}
считать++;
}
инетмаска += количество;
}
вернуть маску сети;
}
/**
* Рассчитать размер подсети
*
* @param маска сети
* Биты маски
* @возвращаться
*/
public static int getPoolMax(int maskBit)
{
если (маскабит <= 0 || маскамаска >= 32)
{
вернуть 0;
}
return (int) Math.pow(2, 32 - MaskBit) - 2;
}
частный статический StringBuffer toBin (int x)
{
Результат StringBuffer = новый StringBuffer();
result.append(x % 2);
х /= 2;
пока (х>0)
{
result.append(x % 2);
х /= 2;
}
вернуть результат;
}
/*
* Сохраняет все биты маски и соответствующий ключ маски: значение бита маски: маска (xxxx)
*/
частная статическая карта<String, String> MaskBitMap()
{
Map<String, String> MaskBit = новый 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");
вернуть маскубит;
}
/**
* Получить маску на основе битов маски
*
* маски @param
* @возвращаться
*/
@Устарело
общедоступная статическая строка getMaskByMaskBit (int маски)
{
Строка ret = "";
если (маски == 1)
рет = "128.0.0.0";
иначе если (маски == 2)
рет = "192.0.0.0";
иначе если (маски == 3)
рет = "224.0.0.0";
иначе если (маски == 4)
рет = "240.0.0.0";
иначе если (маски == 5)
рет = "248.0.0.0";
иначе если (маски == 6)
рет = "252.0.0.0";
иначе если (маски == 7)
рет = "254.0.0.0";
иначе если (маски == 8)
рет = "255.0.0.0";
иначе если (маски == 9)
рет = "255.128.0.0";
иначе если (маски == 10)
рет = "255.192.0.0";
иначе если (маски == 11)
рет = "255.224.0.0";
иначе если (маски == 12)
рет = "255.240.0.0";
иначе если (маски == 13)
рет = "255.248.0.0";
иначе если (маски == 14)
рет = "255.252.0.0";
иначе если (маски == 15)
рет = "255.254.0.0";
иначе если (маски == 16)
рет = "255.255.0.0";
иначе если (маски == 17)
рет = "255.255.128.0";
иначе если (маски == 18)
рет = "255.255.192.0";
иначе если (маски == 19)
рет = "255.255.224.0";
иначе если (маски == 20)
рет = "255.255.240.0";
иначе если (маски == 21)
рет = "255.255.248.0";
иначе если (маски == 22)
рет = "255.255.252.0";
иначе если (маски == 23)
рет = "255.255.254.0";
иначе если (маски == 24)
рет = "255.255.255.0";
иначе если (маски == 25)
Рет = "255.255.255.128";
иначе если (маски == 26)
рет = "255.255.255.192";
иначе если (маски == 27)
Рет = "255.255.255.224";
иначе если (маски == 28)
Рет = "255.255.255.240";
иначе если (маски == 29)
Рет = "255.255.255.248";
иначе если (маски == 30)
Рет = "255.255.255.252";
иначе если (маски == 31)
Рет = "255.255.255.254";
иначе если (маски == 32)
Рет = "255.255.255.255";
вернуть возврат;
}
}