فئة أدوات Java لمعالجة IP، بما في ذلك تحويل نوع IP الطويل إلى نوع IP عام، وتحويل نوع xx.xx.xx.xx إلى نوع طويل، والحصول على قناع يعتمد على بتات القناع، وحساب IP بناءً على بتات ip/القناع. يمكن استخدام عنوان IP الأولي للمقطع وعنوان IP النهائي لمقطع IP استنادًا إلى بتات IP/القناع مباشرة!
انسخ رمز الكود كما يلي:
الحزمة com.hh.test;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
/**
* أدوات الملكية الفكرية
*
* @المؤلف ب
* @البريد الإلكتروني [email protected]
*
*/
IPUtils من الفئة العامة
{
/**
* تحويل نوع IP الطويل إلى نوع IP العام: xx.xx.xx.xx
*
* @param الملكية الفكرية
* @يعود
*/
سلسلة 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);
إرجاع s1 + "." + s2 + "." + s3 + "."
}
/**
* تحويل نوع xx.xx.xx.xx إلى نوع طويل
*
* @param الملكية الفكرية
* @يعود
*/
getIpFromString طويل ثابت عام (سلسلة IP)
{
طويل ipLong = 0L؛
String ipTemp = ip;
إيبلونج = إيبلونج * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
إيبلونج = إيبلونج * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
إيبلونج = إيبلونج * 256
+ Long.parseLong(ipTemp.substring(0, ipTemp.indexOf(".")));
ipTemp = ipTemp.substring(ipTemp.indexOf(".") + 1, ipTemp.length());
ipLong = ipLong * 256 + Long.parseLong(ipTemp);
إرجاع إيبلونج؛
}
/**
* احصل على القناع بناءً على أجزاء القناع
*
* @param MaskBit
* عدد أرقام القناع مثل "28"، "30"
* @يعود
*/
سلسلة ثابتة عامة getMaskByMaskBit(String MaskBit)
{
إرجاع StringUtils.isEmpty(maskBit) "خطأ، MaskBit فارغ!"
:maskBitMap().get(maskBit);
}
/**
* حساب IP البداية لمقطع IP بناءً على بتات IP/القناع، مثل سلسلة IP 218.240.38.69/30
*
* @param الملكية الفكرية
* عنوان 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
*
* @param الملكية الفكرية
* عنوان IP محدد، مثل 218.240.38.69
* @param MaskBit
* نظرا لبتات القناع، مثل 30
* @return تمثيل عدد صحيح طويل لعنوان IP البادئ
*/
ثابت عام طويل getBeginIpLong (String ip، String MaskBit)
{
return getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* حساب عنوان IP النهائي لمقطع IP استنادًا إلى بتات IP/القناع، مثل سلسلة IP 218.240.38.69/30
*
* @param الملكية الفكرية
* عنوان 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
*
* @param الملكية الفكرية
* عنوان IP محدد، مثل 218.240.38.69
* @param MaskBit
* نظرا لبتات القناع، مثل 30
* @return تمثيل عدد صحيح طويل لعنوان IP الخاص بالإنهاء
*/
ثابت عام Long getEndIpLong (String ip، String MaskBit)
{
إرجاع getBeginIpLong(ip, MaskBit)
+ ~getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* التحويل إلى بتات قناع وفقًا لقناع الشبكة الفرعية، مثل 255.255.255.252، والذي يتم تحويله إلى بتات قناع 30
*
* @param علامات الشبكة
* @يعود
*/
int public static int getNetMask (سلسلة علامات الشبكة)
{
StringBuffer sbf;
سلسلة سلسلة؛
int inetmask = 0, count = 0;
String[] ipList = netmarks.split("//.");
لـ (int n = 0; n < ipList.length; n++)
{
sbf = toBin(Integer.parseInt(ipList[n]));
str = sbf.reverse().toString();
العد = 0؛
لـ (int i = 0; i < str. length(); i++)
{
i = str.indexOf('1', i);
إذا (ط == -1)
{
استراحة؛
}
العد++;
}
inetmask += count;
}
إرجاع قناع الشبكة؛
}
/**
* حساب حجم الشبكة الفرعية
*
* @param قناع الشبكة
*قطع القناع
* @يعود
*/
int العام الثابت getPoolMax(int maskBit)
{
إذا (maskBit <= 0 || MaskBit >= 32)
{
العودة 0؛
}
return (int) Math.pow(2, 32 - MaskBit) - 2;
}
StringBuffer ثابت خاص إلى Bin (int x)
{
نتيجة StringBuffer = new StringBuffer();
result.append(x % 2);
س /= 2;
بينما(س>0)
{
result.append(x % 2);
س /= 2;
}
نتيجة الإرجاع؛
}
/*
* يخزن جميع بتات القناع ومفتاح القناع المقابل: قيمة بت القناع: قناع (xxxx)
*/
خريطة ثابتة خاصة <String, String> قناعBitMap ()
{
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");
إرجاع MaskBit;
}
/**
* احصل على القناع بناءً على أجزاء القناع
*
* أقنعةparam
* @يعود
*/
@مهمل
سلسلة ثابتة عامة getMaskByMaskBit (أقنعة int)
{
سلسلة ret = "";
إذا (الأقنعة == 1)
ret = "128.0.0.0";
وإلا إذا (الأقنعة == 2)
ret = "192.0.0.0";
وإلا إذا (الأقنعة == 3)
ret = "224.0.0.0";
وإلا إذا (الأقنعة == 4)
ret = "240.0.0.0";
وإلا إذا (الأقنعة == 5)
ret = "248.0.0.0";
وإلا إذا (الأقنعة == 6)
ret = "252.0.0.0";
وإلا إذا (الأقنعة == 7)
ret = "254.0.0.0";
وإلا إذا (الأقنعة == 8)
ret = "255.0.0.0";
وإلا إذا (الأقنعة == 9)
ret = "255.128.0.0";
وإلا إذا (الأقنعة == 10)
ret = "255.192.0.0";
وإلا إذا (الأقنعة == 11)
ret = "255.224.0.0";
وإلا إذا (الأقنعة == 12)
ret = "255.240.0.0";
وإلا إذا (الأقنعة == 13)
ret = "255.248.0.0";
وإلا إذا (الأقنعة == 14)
ret = "255.252.0.0";
وإلا إذا (الأقنعة == 15)
ret = "255.254.0.0";
وإلا إذا (الأقنعة == 16)
ret = "255.255.0.0";
وإلا إذا (الأقنعة == 17)
ret = "255.255.128.0";
وإلا إذا (الأقنعة == 18)
ret = "255.255.192.0";
وإلا إذا (الأقنعة == 19)
ret = "255.255.224.0";
وإلا إذا (الأقنعة == 20)
ret = "255.255.240.0";
وإلا إذا (الأقنعة == 21)
ret = "255.255.248.0";
وإلا إذا (الأقنعة == 22)
ret = "255.255.252.0";
وإلا إذا (الأقنعة == 23)
ret = "255.255.254.0";
وإلا إذا (الأقنعة == 24)
ret = "255.255.255.0";
وإلا إذا (الأقنعة == 25)
ret = "255.255.255.128";
وإلا إذا (الأقنعة == 26)
ret = "255.255.255.192";
وإلا إذا (الأقنعة == 27)
ret = "255.255.255.224";
وإلا إذا (الأقنعة == 28)
ret = "255.255.255.240";
وإلا إذا (الأقنعة == 29)
ret = "255.255.255.248";
وإلا إذا (الأقنعة == 30)
ret = "255.255.255.252";
وإلا إذا (الأقنعة == 31)
ret = "255.255.255.254";
وإلا إذا (الأقنعة == 32)
ret = "255.255.255.255";
عودة متقاعد؛
}
}