Classe d'outils Java pour le traitement de l'IP, y compris la conversion de l'IP de type long en type IP général, la conversion du type xx.xx.xx.xx en type long, l'obtention d'un masque basé sur les bits de masque et le calcul de l'IP basé sur les bits ip/masque. Méthodes telles que L'IP de début du segment et l'IP de fin du segment IP basées sur les bits ip/mask peuvent être utilisées directement !
Copiez le code comme suit :
paquet com.hh.test;
importer java.util.HashMap ;
importer java.util.Map ;
importer org.apache.commons.lang3.StringUtils ;
/**
* Outils IP
*
* @auteur bl
* @email [email protected]
*
*/
classe publique IPUtils
{
/**
* Convertir l'IP de type long en type IP général : xx.xx.xx.xx
*
* @param ip
* @retour
*/
chaîne statique publique getIpFromLong (IP longue)
{
Chaîne s1 = String.valueOf((ip & 4278190080L) / 16777216L);
Chaîne s2 = String.valueOf((ip & 16711680L) / 65536L);
Chaîne s3 = String.valueOf((ip & 65280L) / 256L);
Chaîne s4 = String.valueOf(ip & 255L);
renvoyer s1 + "." + s2 + "." + s3 + "."
}
/**
* Convertir le type xx.xx.xx.xx en type long
*
* @param ip
* @retour
*/
public statique Long getIpFromString (String ip)
{
Long ipLong = 0L ;
Chaîne 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);
retourneripLong ;
}
/**
* Obtenez le masque en fonction des bits du masque
*
* @param masqueBit
* Nombre de chiffres du masque, tels que "28", "30"
* @retour
*/
chaîne statique publique getMaskByMaskBit (chaîne masqueBit)
{
return StringUtils.isEmpty(maskBit) ? "Erreur, maskBit est nul !"
: masqueBitMap().get(maskBit);
}
/**
* Calculez l'adresse IP de départ du segment IP en fonction des bits IP/masque, tels que la chaîne IP 218.240.38.69/30.
*
* @param ip
* Étant donné l'adresse IP, telle que 218.240.38.69
* @param masqueBit
* Compte tenu des bits de masque, tels que 30
* @return Représentation sous forme de chaîne de l'adresse IP de départ
*/
chaîne statique publique getBeginIpStr (String ip, String maskBit)
{
return getIpFromLong(getBeginIpLong(ip, maskBit));
}
/**
* Calculez l'adresse IP de départ du segment IP en fonction des bits IP/masque, tels que la chaîne IP 218.240.38.69/30.
*
* @param ip
* Étant donné l'adresse IP, telle que 218.240.38.69
* @param masqueBit
* Compte tenu des bits de masque, tels que 30
* @return Représentation entière longue de l'adresse IP de départ
*/
public statique Long getBeginIpLong (String ip, String maskBit)
{
return getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Calculez l'adresse IP de fin du segment IP en fonction des bits ip/masque, tels que la chaîne IP 218.240.38.69/30.
*
* @param ip
* Étant donné l'adresse IP, telle que 218.240.38.69
* @param masqueBit
* Compte tenu des bits de masque, tels que 30
* @return Représentation sous forme de chaîne de l'adresse IP de terminaison
*/
chaîne statique publique getEndIpStr (String ip, String maskBit)
{
return getIpFromLong(getEndIpLong(ip, maskBit));
}
/**
* Calculez l'adresse IP de fin du segment IP en fonction des bits ip/masque, tels que la chaîne IP 218.240.38.69/30.
*
* @param ip
* Étant donné l'adresse IP, telle que 218.240.38.69
* @param masqueBit
* Compte tenu des bits de masque, tels que 30
* @return Représentation entière longue de l'adresse IP de terminaison
*/
public statique Long getEndIpLong (String ip, String maskBit)
{
retourner getBeginIpLong (ip, masqueBit)
+ ~getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Convertir en bits de masque en fonction du masque de sous-réseau, tel que 255.255.255.252, qui est converti en bits de masque 30
*
* @param netmarks
* @retour
*/
public static int getNetMask (marqueurs de chaîne de chaîne)
{
StringBuffer sbf;
Chaîne chaîne ;
int masque inet = 0, compte = 0 ;
String[] ipList = netmarks.split("//.");
pour (int n = 0; n < ipList.length; n++)
{
sbf = toBin(Integer.parseInt(ipList[n]));
str = sbf.reverse().toString();
compte = 0 ;
pour (int i = 0; i < str.length(); i++)
{
je = str.indexOf('1', je);
si (je == -1)
{
casser;
}
compte++;
}
inetmask += compte ;
}
retourner le masque inet;
}
/**
* Calculer la taille du sous-réseau
*
* @param masque de réseau
*Bits de masque
* @retour
*/
public statique int getPoolMax(int maskBit)
{
si (masqueBit <= 0 || masqueBit >= 32)
{
renvoie 0 ;
}
return (int) Math.pow(2, 32 - maskBit) - 2;
}
StringBuffer statique privé toBin (int x)
{
Résultat StringBuffer = new StringBuffer();
résultat.append(x % 2);
x /= 2 ;
pendant que (x>0)
{
résultat.append(x % 2);
x /= 2 ;
}
renvoyer le résultat ;
}
/*
* Stocke tous les bits de masque et la clé de masque correspondante : valeur du bit de masque : masque (xxxx)
*/
Map statique privée<String, String> maskBitMap()
{
Map<String, String> maskBit = new HashMap<String, String>();
masqueBit.put("1", "128.0.0.0");
masqueBit.put("2", "192.0.0.0");
masqueBit.put("3", "224.0.0.0");
masqueBit.put("4", "240.0.0.0");
masqueBit.put("5", "248.0.0.0");
masqueBit.put("6", "252.0.0.0");
masqueBit.put("7", "254.0.0.0");
masqueBit.put("8", "255.0.0.0");
masqueBit.put("9", "255.128.0.0");
masqueBit.put("10", "255.192.0.0");
masqueBit.put("11", "255.224.0.0");
masqueBit.put("12", "255.240.0.0");
masqueBit.put("13", "255.248.0.0");
masqueBit.put("14", "255.252.0.0");
masqueBit.put("15", "255.254.0.0");
masqueBit.put("16", "255.255.0.0");
masqueBit.put("17", "255.255.128.0");
masqueBit.put("18", "255.255.192.0");
masqueBit.put("19", "255.255.224.0");
masqueBit.put("20", "255.255.240.0");
masqueBit.put("21", "255.255.248.0");
masqueBit.put("22", "255.255.252.0");
masqueBit.put("23", "255.255.254.0");
masqueBit.put("24", "255.255.255.0");
masqueBit.put("25", "255.255.255.128");
masqueBit.put("26", "255.255.255.192");
masqueBit.put("27", "255.255.255.224");
masqueBit.put("28", "255.255.255.240");
masqueBit.put("29", "255.255.255.248");
masqueBit.put("30", "255.255.255.252");
masqueBit.put("31", "255.255.255.254");
masqueBit.put("32", "255.255.255.255");
retourner masqueBit ;
}
/**
* Obtenez le masque en fonction des bits du masque
*
* Masques @param
* @retour
*/
@Obsolète
chaîne statique publique getMaskByMaskBit (masques int)
{
Chaîne ret = "" ;
si (masques == 1)
ret = "128.0.0.0" ;
sinon si (masques == 2)
ret = "192.0.0.0" ;
sinon si (masques == 3)
ret = "224.0.0.0" ;
sinon si (masques == 4)
ret = "240.0.0.0" ;
sinon si (masques == 5)
ret = "248.0.0.0" ;
sinon si (masques == 6)
ret = "252.0.0.0" ;
sinon si (masques == 7)
ret = "254.0.0.0" ;
sinon si (masques == 8)
ret = "255.0.0.0" ;
sinon si (masques == 9)
ret = "255.128.0.0" ;
sinon si (masques == 10)
ret = "255.192.0.0" ;
sinon si (masques == 11)
ret = "255.224.0.0" ;
sinon si (masques == 12)
ret = "255.240.0.0" ;
sinon si (masques == 13)
ret = "255.248.0.0" ;
sinon si (masques == 14)
ret = "255.252.0.0" ;
sinon si (masques == 15)
ret = "255.254.0.0" ;
sinon si (masques == 16)
ret = "255.255.0.0" ;
sinon si (masques == 17)
ret = "255.255.128.0" ;
sinon si (masques == 18)
ret = "255.255.192.0" ;
sinon si (masques == 19)
ret = "255.255.224.0" ;
sinon si (masques == 20)
ret = "255.255.240.0" ;
sinon si (masques == 21)
ret = "255.255.248.0" ;
sinon si (masques == 22)
ret = "255.255.252.0" ;
sinon si (masques == 23)
ret = "255.255.254.0" ;
sinon si (masques == 24)
ret = "255.255.255.0" ;
sinon si (masques == 25)
ret = "255.255.255.128" ;
sinon si (masques == 26)
ret = "255.255.255.192" ;
sinon si (masques == 27)
ret = "255.255.255.224" ;
sinon si (masques == 28)
ret = "255.255.255.240" ;
sinon si (masques == 29)
ret = "255.255.255.248" ;
sinon si (masques == 30)
ret = "255.255.255.252" ;
sinon si (masques == 31)
ret = "255.255.255.254" ;
sinon si (masques == 32)
ret = "255.255.255.255" ;
retour à la retraite;
}
}