Kelas alat Java untuk memproses IP, termasuk mengubah IP tipe panjang menjadi tipe IP umum, mengubah tipe xx.xx.xx.xx menjadi tipe panjang, mendapatkan mask berdasarkan bit mask, dan menghitung IP berdasarkan bit ip/mask. Metode seperti IP awal segmen dan IP akhir segmen IP berdasarkan bit ip/mask dapat digunakan secara langsung!
Copy kode kodenya sebagai berikut:
paket com.hh.test;
impor java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
/**
* Alat IP
*
* @penulis bl
*@email [email protected]
*
*/
IPUtil kelas publik
{
/**
* Ubah IP tipe panjang menjadi tipe IP umum: xx.xx.xx.xx
*
* @param ip
* @kembali
*/
String statis publik getIpFromLong(IP panjang)
{
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);
kembalikan s1 + "." + s2 + "." + s3 + "."
}
/**
* Ubah tipe xx.xx.xx.xx menjadi tipe panjang
*
* @param ip
* @kembali
*/
getIpFromString panjang statis publik (String ip)
{
Panjang ipPanjang = 0L;
String ipTemp = ip;
ipPanjang = ipPanjang * 256
+ Panjang.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipPanjang = ipPanjang * 256
+ Panjang.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipPanjang = ipPanjang * 256
+ Panjang.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipLong = ipLong * 256 + Panjang.parseLong(ipTemp);
kembalikan ipLong;
}
/**
* Dapatkan topeng berdasarkan potongan topeng
*
* @param maskBit
* Jumlah digit topeng, seperti "28", "30"
* @kembali
*/
String statis publik getMaskByMaskBit(String maskBit)
{
kembalikan StringUtils.isEmpty(maskBit) ?
: maskBitMap().get(maskBit);
}
/**
* Hitung IP awal segmen IP berdasarkan bit ip/mask, misalnya string IP 218.240.38.69/30
*
* @param ip
* Diberikan IP, misalnya 218.240.38.69
* @param maskBit
* Diberikan bit mask, misalnya 30
* @return Representasi string dari IP awal
*/
String statis publik getBeginIpStr(String ip, String maskBit)
{
kembalikan getIpFromLong(getBeginIpLong(ip, maskBit));
}
/**
* Hitung IP awal segmen IP berdasarkan bit ip/mask, misalnya string IP 218.240.38.69/30
*
* @param ip
* Diberikan IP, misalnya 218.240.38.69
* @param maskBit
* Diberikan bit mask, misalnya 30
* @return Representasi bilangan bulat panjang dari IP awal
*/
public static Long getBeginIpLong(String ip, String maskBit)
{
kembalikan getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Hitung IP akhir segmen IP berdasarkan bit ip/mask, misalnya string IP 218.240.38.69/30
*
* @param ip
* Diberikan IP, misalnya 218.240.38.69
* @param maskBit
* Diberikan bit mask, misalnya 30
* @return String representasi dari IP terminasi
*/
String statis publik getEndIpStr(String ip, String maskBit)
{
kembalikan getIpFromLong(getEndIpLong(ip, maskBit));
}
/**
* Hitung IP akhir segmen IP berdasarkan bit ip/mask, misalnya string IP 218.240.38.69/30
*
* @param ip
* Diberikan IP, seperti 218.240.38.69
* @param maskBit
* Diberikan bit mask, misalnya 30
* @return Representasi bilangan bulat panjang dari IP terminasi
*/
public static Long getEndIpLong(String ip, String maskBit)
{
kembalikan getBeginIpLong(ip, maskBit)
+ ~getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* Konversikan ke bit mask sesuai dengan subnet mask, seperti 255.255.255.252, yang diubah menjadi bit mask 30
*
* @param tanda jaringan
* @kembali
*/
public static int getNetMask (String netmark)
{
StringBuffer sbf;
Tali str;
int inetmask = 0, hitung = 0;
String[] ipList = netmarks.split("//.");
untuk (int n = 0; n < ipList.length; n++)
{
sbf = toBin(Integer.parseInt(ipList[n]));
str = sbf.reverse().toString();
hitungan = 0;
untuk (int i = 0; i < str.panjang(); i++)
{
i = str.indexOf('1', saya);
jika (saya == -1)
{
merusak;
}
hitung++;
}
inetmask += hitungan;
}
kembalikan inetmask;
}
/**
* Hitung ukuran subnet
*
* @param netmask
*Potongan masker
* @kembali
*/
int getPoolMax publik statis (int maskBit)
{
jika (maskBit <= 0 || maskBit >= 32)
{
kembali 0;
}
return (int) Math.pow(2, 32 - maskBit) - 2;
}
StringBuffer statis pribadi toBin(int x)
{
Hasil StringBuffer = StringBuffer baru();
hasil.tambahkan(x % 2);
x /= 2;
sementara(x>0)
{
hasil.tambahkan(x % 2);
x /= 2;
}
hasil pengembalian;
}
/*
* Menyimpan semua bit topeng dan kunci topeng yang sesuai: nilai bit topeng: topeng (xxxx)
*/
Peta statis pribadi<String, String> maskBitMap()
{
Peta<String, String> maskBit = HashMap baru<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");
kembalikan maskBit;
}
/**
* Dapatkan topeng berdasarkan potongan topeng
*
* @param masker
* @kembali
*/
@Tidak digunakan lagi
String statis publik getMaskByMaskBit(int masker)
{
String ret = "";
jika (topeng == 1)
ret = "128.0.0.0";
else if (masker == 2)
ret = "192.0.0.0";
else if (masker == 3)
ret = "224.0.0.0";
else if (masker == 4)
ret = "240.0.0.0";
else if (masker == 5)
ret = "248.0.0.0";
else if (masker == 6)
ret = "252.0.0.0";
else if (masker == 7)
ret = "254.0.0.0";
else if (masker == 8)
ret = "255.0.0.0";
else if (masker == 9)
ret = "255.128.0.0";
else if (masker == 10)
ret = "255.192.0.0";
else if (masker == 11)
ret = "255.224.0.0";
else if (masker == 12)
ret = "255.240.0.0";
else if (masker == 13)
ret = "255.248.0.0";
else if (masker == 14)
ret = "255.252.0.0";
else if (masker == 15)
ret = "255.254.0.0";
else if (masker == 16)
ret = "255.255.0.0";
else if (masker == 17)
ret = "255.255.128.0";
else if (masker == 18)
ret = "255.255.192.0";
else if (masker == 19)
ret = "255.255.224.0";
else if (masker == 20)
ret = "255.255.240.0";
else if (masker == 21)
ret = "255.255.248.0";
else if (masker == 22)
ret = "255.255.252.0";
else if (masker == 23)
ret = "255.255.254.0";
else if (masker == 24)
ret = "255.255.255.0";
else if (masker == 25)
ret = "255.255.255.128";
else if (masker == 26)
ret = "255.255.255.192";
else if (masker == 27)
ret = "255.255.255.224";
else if (masker == 28)
ret = "255.255.255.240";
else if (masker == 29)
ret = "255.255.255.248";
else if (masker == 30)
ret = "255.255.255.252";
else if (masker == 31)
ret = "255.255.255.254";
else if (masker == 32)
ret = "255.255.255.255";
kembali mundur;
}
}