ロング型 IP から一般的な IP 型への変換、xx.xx.xx.xx 型からロング型への変換、マスク ビットに基づいたマスクの取得、ip/マスク ビットに基づいた IP の計算など、IP を処理するための Java ツール クラス。 IP/マスク ビットに基づくセグメントの開始 IP と IP セグメントの終了 IP を直接使用できます。
次のようにコードをコピーします。
パッケージcom.hh.test;
java.util.HashMapをインポートします。
java.util.Mapをインポートします。
org.apache.commons.lang3.StringUtils をインポートします。
/**
* 知財ツール
*
* @作者bl
* @メール [email protected]
*
*/
パブリッククラスIPUtils
{
/**
* ロングタイプの IP を一般的な IP タイプに変換: xx.xx.xx.xx
*
* @パラメータIP
* @戻る
*/
パブリック静的文字列 getIpFromLong(Long ip)
{
文字列 s1 = String.valueOf((ip & 4278190080L) / 16777216L);
文字列 s2 = String.valueOf((ip & 16711680L) / 65536L);
文字列 s3 = String.valueOf((ip & 65280L) / 256L);
文字列 s4 = String.valueOf(ip & 255L);
s1 + "." + s2 + "." + s3 + "." を返します。
}
/**
※xx.xx.xx.xx型をlong型に変換
*
* @パラメータIP
* @戻る
*/
public static 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マスクビット
※マスク桁数「28」「30」など
* @戻る
*/
public static String getMaskByMaskBit(String MaskBit)
{
return StringUtils.isEmpty(maskBit) ? "エラー、maskBit が null です!"
:maskBitMap().get(maskBit);
}
/**
* IP 文字列 218.240.38.69/30 などの IP/マスク ビットに基づいて IP セグメントの開始 IP を計算します。
*
* @パラメータIP
* 指定された IP (218.240.38.69 など)
* @paramマスクビット
* 指定されたマスク ビット (30 など)
* @return 開始IPの文字列表現
*/
public static String getBeginIpStr(String ip, String MaskBit)
{
return getIpFromLong(getBeginIpLong(ip, マスクビット));
}
/**
* IP 文字列 218.240.38.69/30 などの IP/マスク ビットに基づいて IP セグメントの開始 IP を計算します。
*
* @パラメータIP
* 指定された IP (218.240.38.69 など)
* @paramマスクビット
* 指定されたマスク ビット (30 など)
* @return 開始 IP の Long 整数表現
*/
public static Long getBeginIpLong(String ip, String MaskBit)
{
getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit)); を返します。
}
/**
* IP 文字列 218.240.38.69/30 などの IP/マスク ビットに基づいて IP セグメントの終了 IP を計算します。
*
* @パラメータIP
* 指定された IP (218.240.38.69 など)
* @paramマスクビット
* 指定されたマスク ビット (30 など)
* @return 終端 IP の文字列表現
*/
public static String getEndIpStr(String ip, String MaskBit)
{
return getIpFromLong(getEndIpLong(ip, マスクビット));
}
/**
* IP 文字列 218.240.38.69/30 などの IP/マスク ビットに基づいて IP セグメントの終了 IP を計算します。
*
* @パラメータIP
* 指定された IP (218.240.38.69 など)
* @paramマスクビット
* 指定されたマスク ビット (30 など)
* @return 終端 IP の Long 整数表現
*/
public static Long getEndIpLong(String ip, String MaskBit)
{
getBeginIpLong(ip, マスクビット) を返す
+ ~getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* マスク ビット 30 に変換される 255.255.255.252 など、サブネット マスクに応じたマスク ビットに変換します。
*
* @param ネットマーク
* @戻る
*/
public static int getNetMask(String netmarks)
{
文字列バッファsbf;
文字列 str;
int inetmask = 0、カウント = 0;
String[] ipList = netmarks.split("//.");
for (int n = 0; n < ipList.length; n++)
{
sbf = toBin(Integer.parseInt(ipList[n]));
str = sbf.reverse().toString();
カウント = 0;
for (int i = 0; i < str.length(); i++)
{
i = str.indexOf('1', i);
if (i == -1)
{
壊す;
}
カウント++;
}
inetmask += カウント;
}
inetmask を返します。
}
/**
* サブネットサイズの計算
*
* @param ネットマスク
*マスクビット
* @戻る
*/
パブリック静的int getPoolMax(intmaskBit)
{
if (マスクビット <= 0 || マスクビット >= 32)
{
0を返します。
}
return (int) Math.pow(2, 32 - マスクビット) - 2;
}
プライベート静的 StringBuffer toBin(int x)
{
StringBuffer 結果 = new StringBuffer();
result.append(x % 2);
x /= 2;
while(x>0)
{
result.append(x % 2);
x /= 2;
}
結果を返します。
}
/*
* すべてのマスク ビットと対応するマスク キー:マスク ビット値:マスク (xxxx) を格納します。
*/
プライベート静的 Map<String, String> MaskBitMap()
{
Map<String, String> マスクビット = new HashMap<String, String>();
マスクビット.put("1", "128.0.0.0");
マスクビット.put("2", "192.0.0.0");
マスクビット.put("3", "224.0.0.0");
マスクビット.put("4", "240.0.0.0");
マスクビット.put("5", "248.0.0.0");
マスクビット.put("6", "252.0.0.0");
マスクビット.put("7", "254.0.0.0");
マスクビット.put("8", "255.0.0.0");
マスクビット.put("9", "255.128.0.0");
マスクビット.put("10", "255.192.0.0");
マスクビット.put("11", "255.224.0.0");
マスクビット.put("12", "255.240.0.0");
マスクビット.put("13", "255.248.0.0");
マスクビット.put("14", "255.252.0.0");
マスクビット.put("15", "255.254.0.0");
マスクビット.put("16", "255.255.0.0");
マスクビット.put("17", "255.255.128.0");
マスクビット.put("18", "255.255.192.0");
マスクビット.put("19", "255.255.224.0");
マスクビット.put("20", "255.255.240.0");
マスクビット.put("21", "255.255.248.0");
マスクビット.put("22", "255.255.252.0");
マスクビット.put("23", "255.255.254.0");
マスクビット.put("24", "255.255.255.0");
マスクビット.put("25", "255.255.255.128");
マスクビット.put("26", "255.255.255.192");
マスクビット.put("27", "255.255.255.224");
マスクビット.put("28", "255.255.255.240");
マスクビット.put("29", "255.255.255.248");
マスクビット.put("30", "255.255.255.252");
マスクビット.put("31", "255.255.255.254");
マスクビット.put("32", "255.255.255.255");
マスクビットを返します。
}
/**
* マスクビットに基づいてマスクを取得します
*
* @param マスク
* @戻る
*/
@非推奨
パブリック静的文字列 getMaskByMaskBit(int マスク)
{
文字列 ret = "";
if (マスク == 1)
ret = "128.0.0.0";
else if (マスク == 2)
ret = "192.0.0.0";
else if (マスク == 3)
ret = "224.0.0.0";
else if (マスク == 4)
ret = "240.0.0.0";
else if (マスク == 5)
ret = "248.0.0.0";
else if (マスク == 6)
ret = "252.0.0.0";
else if (マスク == 7)
ret = "254.0.0.0";
else if (マスク == 8)
ret = "255.0.0.0";
else if (マスク == 9)
ret = "255.128.0.0";
else if (マスク == 10)
ret = "255.192.0.0";
else if (マスク == 11)
ret = "255.224.0.0";
else if (マスク == 12)
ret = "255.240.0.0";
else if (マスク == 13)
ret = "255.248.0.0";
else if (マスク == 14)
ret = "255.252.0.0";
else if (マスク == 15)
ret = "255.254.0.0";
else if (マスク == 16)
ret = "255.255.0.0";
else if (マスク == 17)
ret = "255.255.128.0";
else if (マスク == 18)
ret = "255.255.192.0";
else if (マスク == 19)
ret = "255.255.224.0";
else if (マスク == 20)
ret = "255.255.240.0";
else if (マスク == 21)
ret = "255.255.248.0";
else if (マスク == 22)
ret = "255.255.252.0";
else if (マスク == 23)
ret = "255.255.254.0";
else if (マスク == 24)
ret = "255.255.255.0";
else if (マスク == 25)
ret = "255.255.255.128";
else if (マスク == 26)
ret = "255.255.255.192";
else if (マスク == 27)
ret = "255.255.255.224";
else if (マスク == 28)
ret = "255.255.255.240";
else if (マスク == 29)
ret = "255.255.255.248";
else if (マスク == 30)
ret = "255.255.255.252";
else if (マスク == 31)
ret = "255.255.255.254";
else if (マスク == 32)
ret = "255.255.255.255";
retを返します。
}
}