Classe de ferramenta Java para processamento de IP, incluindo conversão de IP de tipo longo em tipo de IP geral, conversão de tipo xx.xx.xx.xx em tipo longo, obtenção de máscara com base em bits de máscara e cálculo de IP com base em bits de ip/máscara Métodos como o O IP inicial do segmento e o IP final do segmento IP com base nos bits ip/máscara podem ser usados diretamente!
Copie o código do código da seguinte forma:
pacote com.hh.test;
importar java.util.HashMap;
importar java.util.Map;
importar org.apache.commons.lang3.StringUtils;
/**
* Ferramentas IP
*
* @autor bl
* @e-mail [email protected]
*
*/
classe pública IPUtils
{
/**
* Converta IP de tipo longo em tipo de IP geral: xx.xx.xx.xx
*
* @paramip
* @retornar
*/
String estática pública getIpFromLong (IP longo)
{
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);
retornar s1 + "." + s2 + "." + s3 + "."
}
/**
* Converta o tipo xx.xx.xx.xx em tipo longo
*
* @paramip
* @retornar
*/
public static Long getIpFromString(String ip)
{
Longo ipLong = 0L;
String ipTemp = ip;
ipLongo = ipLongo * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipLongo = ipLongo * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipLongo = ipLongo * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipLong = ipLong * 256 + Long.parseLong(ipTemp);
retornar ipLong;
}
/**
* Obtenha a máscara com base nos bits da máscara
*
* @param máscaraBit
* Número de dígitos da máscara, como "28", "30"
* @retornar
*/
String estática pública getMaskByMaskBit (String maskBit)
{
retornar StringUtils.isEmpty(maskBit) ? "erro, maskBit é nulo!"
:maskBitMap().get(maskBit);
}
/**
* Calcule o IP inicial do segmento IP com base nos bits ip/mask, como a string IP 218.240.38.69/30
*
* @paramip
* Dado IP, como 218.240.38.69
* @param máscaraBit
* Dados bits de máscara, como 30
* @return Representação em string do IP inicial
*/
String estática pública getBeginIpStr (String ip, String maskBit)
{
retornar getIpFromLong(getBeginIpLong(ip,maskBit));
}
/**
* Calcule o IP inicial do segmento IP com base nos bits ip/mask, como a string IP 218.240.38.69/30
*
* @paramip
* Dado IP, como 218.240.38.69
* @param máscaraBit
* Dados bits de máscara, como 30
* @return Representação inteira longa do IP inicial
*/
public static Long getBeginIpLong (String ip, String maskBit)
{
retornar getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Calcule o IP final do segmento IP com base nos bits ip/máscara, como a string IP 218.240.38.69/30
*
* @paramip
* Dado IP, como 218.240.38.69
* @param máscaraBit
* Dados bits de máscara, como 30
* @return Representação em string do IP de terminação
*/
String estática pública getEndIpStr (String ip, String maskBit)
{
retornar getIpFromLong(getEndIpLong(ip,maskBit));
}
/**
* Calcule o IP final do segmento IP com base nos bits ip/máscara, como a string IP 218.240.38.69/30
*
* @paramip
* Dado IP, como 218.240.38.69
* @param máscaraBit
* Dados bits de máscara, como 30
* @return Representação inteira longa do IP de terminação
*/
public static Long getEndIpLong (String ip, String maskBit)
{
retornar getBeginIpLong(ip,maskBit)
+ ~getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Converte em bits de máscara de acordo com a máscara de sub-rede, como 255.255.255.252, que é convertido em bits de máscara 30
*
* @param marcas de rede
* @retornar
*/
public static int getNetMask(String marcas de rede)
{
StringBuffer sbf;
Cadeia de caracteres;
int inetmask = 0, contagem = 0;
String[] ipList = netmarks.split("//.");
for (int n = 0; n <ipList.length; n++)
{
sbf = toBin(Integer.parseInt(ipList[n]));
str = sbf.reverse().toString();
contagem = 0;
for (int i = 0; i < str.length(); i++)
{
eu = str.indexOf('1', eu);
se (eu == -1)
{
quebrar;
}
contar++;
}
máscara de inet += contagem;
}
retornar máscara de inet;
}
/**
* Calcule o tamanho da sub-rede
*
* @param máscara de rede
*Pedaços de máscara
* @retornar
*/
público estático int getPoolMax(intmaskBit)
{
if (maskBit <= 0 || maskBit >= 32)
{
retornar 0;
}
return (int) Math.pow(2, 32 - máscaraBit) - 2;
}
StringBuffer estático privado toBin (int x)
{
Resultado StringBuffer = new StringBuffer();
resultado.append(x% 2);
x/= 2;
enquanto(x>0)
{
resultado.append(x% 2);
x/= 2;
}
resultado de retorno;
}
/*
* Armazena todos os bits da máscara e a chave da máscara correspondente:valor do bit da máscara:máscara (xxxx)
*/
Mapa estático privado<String, String>maskBitMap()
{
Map<String, String> mascaraBit = new HashMap<String, String>();
máscaraBit.put("1", "128.0.0.0");
máscaraBit.put("2", "192.0.0.0");
máscaraBit.put("3", "224.0.0.0");
máscaraBit.put("4", "240.0.0.0");
máscaraBit.put("5", "248.0.0.0");
máscaraBit.put("6", "252.0.0.0");
máscaraBit.put("7", "254.0.0.0");
máscaraBit.put("8", "255.0.0.0");
máscaraBit.put("9", "255.128.0.0");
máscaraBit.put("10", "255.192.0.0");
máscaraBit.put("11", "255.224.0.0");
máscaraBit.put("12", "255.240.0.0");
máscaraBit.put("13", "255.248.0.0");
máscaraBit.put("14", "255.252.0.0");
máscaraBit.put("15", "255.254.0.0");
máscaraBit.put("16", "255.255.0.0");
máscaraBit.put("17", "255.255.128.0");
máscaraBit.put("18", "255.255.192.0");
máscaraBit.put("19", "255.255.224.0");
máscaraBit.put("20", "255.255.240.0");
máscaraBit.put("21", "255.255.248.0");
máscaraBit.put("22", "255.255.252.0");
máscaraBit.put("23", "255.255.254.0");
máscaraBit.put("24", "255.255.255.0");
máscaraBit.put("25", "255.255.255.128");
máscaraBit.put("26", "255.255.255.192");
máscaraBit.put("27", "255.255.255.224");
máscaraBit.put("28", "255.255.255.240");
máscaraBit.put("29", "255.255.255.248");
máscaraBit.put("30", "255.255.255.252");
máscaraBit.put("31", "255.255.255.254");
máscaraBit.put("32", "255.255.255.255");
retornar máscaraBit;
}
/**
* Obtenha a máscara com base nos bits da máscara
*
*@param máscaras
* @retornar
*/
@Obsoleto
string estática pública getMaskByMaskBit (int máscaras)
{
String ret = "";
se (máscaras == 1)
ret = "128.0.0.0";
senão se (máscaras == 2)
ret = "192.0.0.0";
senão se (máscaras == 3)
ret = "224.0.0.0";
senão se (máscaras == 4)
ret = "240.0.0.0";
senão se (máscaras == 5)
ret = "248.0.0.0";
senão se (máscaras == 6)
ret = "252.0.0.0";
senão se (máscaras == 7)
ret = "254.0.0.0";
senão se (máscaras == 8)
ret = "255.0.0.0";
senão se (máscaras == 9)
ret = "255.128.0.0";
senão se (máscaras == 10)
ret = "255.192.0.0";
senão se (máscaras == 11)
ret = "255.224.0.0";
senão se (máscaras == 12)
ret = "255.240.0.0";
senão se (máscaras == 13)
ret = "255.248.0.0";
senão se (máscaras == 14)
ret = "255.252.0.0";
senão se (máscaras == 15)
ret = "255.254.0.0";
senão se (máscaras == 16)
ret = "255.255.0.0";
senão se (máscaras == 17)
ret = "255.255.128.0";
senão se (máscaras == 18)
ret = "255.255.192.0";
senão se (máscaras == 19)
ret = "255.255.224.0";
senão se (máscaras == 20)
ret = "255.255.240.0";
senão se (máscaras == 21)
ret = "255.255.248.0";
senão se (máscaras == 22)
ret = "255.255.252.0";
senão se (máscaras == 23)
ret = "255.255.254.0";
senão se (máscaras == 24)
ret = "255.255.255.0";
senão se (máscaras == 25)
ret = "255.255.255.128";
senão se (máscaras == 26)
ret = "255.255.255.192";
senão se (máscaras == 27)
ret = "255.255.255.224";
senão se (máscaras == 28)
ret = "255.255.255.240";
senão se (máscaras == 29)
ret = "255.255.255.248";
senão se (máscaras == 30)
ret = "255.255.255.252";
senão se (máscaras == 31)
ret = "255.255.255.254";
senão se (máscaras == 32)
ret = "255.255.255.255";
retorno ret;
}
}