Long 유형 IP를 일반 IP 유형으로 변환, xx.xx.xx.xx 유형을 Long 유형으로 변환, 마스크 비트 기반 마스크 획득, IP/마스크 비트 기반 IP 계산 등 IP 처리를 위한 Java 도구 클래스 IP/마스크 비트를 기반으로 세그먼트의 시작 IP와 IP 세그먼트의 끝 IP를 직접 사용할 수 있습니다!
다음과 같이 코드 코드를 복사합니다.
패키지 com.hh.test;
java.util.HashMap 가져오기;
java.util.Map 가져오기;
org.apache.commons.lang3.StringUtils 가져오기;
/**
* IP 도구
*
* @author bl
* @이메일 [email protected]
*
*/
공개 클래스 IPUtils
{
/**
* Long형 IP를 일반 IP형으로 변환: xx.xx.xx.xx
*
* @param ip
* @반품
*/
공개 정적 문자열 getIpFromLong(긴 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 + "." + s4를 반환합니다.
}
/**
* xx.xx.xx.xx 유형을 long 유형으로 변환
*
* @param ip
* @반품
*/
공개 정적 Long getIpFromString(문자열 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" 등 마스크 자릿수
* @반품
*/
공개 정적 문자열 getMaskByMaskBit(문자열 마스크Bit)
{
return StringUtils.isEmpty(maskBit) ? "오류, 마스크비트가 null입니다!"
: 마스크비트맵().get(마스크비트);
}
/**
* IP 문자열 218.240.38.69/30과 같은 IP/마스크 비트를 기반으로 IP 세그먼트의 시작 IP를 계산합니다.
*
* @param ip
* 218.240.38.69와 같은 IP가 주어지면
* @param 마스크비트
* 주어진 마스크 비트(예: 30)
* @return 시작 IP의 문자열 표현
*/
공개 정적 문자열 getBeginIpStr(문자열 ip, 문자열 마스크비트)
{
return getIpFromLong(getBeginIpLong(ip, 마스크비트));
}
/**
* IP 문자열 218.240.38.69/30과 같은 IP/마스크 비트를 기반으로 IP 세그먼트의 시작 IP를 계산합니다.
*
* @param ip
* 218.240.38.69와 같은 IP가 주어지면
* @param 마스크비트
* 주어진 마스크 비트(예: 30)
* @return 시작 IP의 긴 정수 표현
*/
공개 정적 Long getBeginIpLong(문자열 ip, 문자열 마스크비트)
{
return getIpFromString(ip) & getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* IP 문자열 218.240.38.69/30과 같은 IP/마스크 비트를 기반으로 IP 세그먼트의 끝 IP를 계산합니다.
*
* @param ip
* 218.240.38.69와 같은 IP가 주어지면
* @param 마스크비트
* 주어진 마스크 비트(예: 30)
* @return 종료 IP 문자열 표현
*/
공개 정적 문자열 getEndIpStr(문자열 ip, 문자열 마스크비트)
{
return getIpFromLong(getEndIpLong(ip, 마스크비트));
}
/**
* IP 문자열 218.240.38.69/30과 같은 IP/마스크 비트를 기반으로 IP 세그먼트의 끝 IP를 계산합니다.
*
* @param ip
* 218.240.38.69와 같은 IP가 주어지면
* @param 마스크비트
* 주어진 마스크 비트(예: 30)
* @return 종료 IP의 긴 정수 표현
*/
공개 정적 Long getEndIpLong(문자열 ip, 문자열 마스크비트)
{
getBeginIpLong(ip, 마스크비트) 반환
+ ~getIpFromString(getMaskByMaskBit(maskBit));
}
/**
* 서브넷 마스크에 따라 마스크 비트로 변환(예: 255.255.255.252)은 마스크 비트 30으로 변환됨
*
* @param 넷마크
* @반품
*/
public static int getNetMask(문자열 넷마크)
{
StringBuffer 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);
만약 (i == -1)
{
부서지다;
}
카운트++;
}
inetmask += 개수;
}
inetmask를 반환합니다.
}
/**
* 서브넷 크기 계산
*
* @param 넷마스크
*마스크 비트
* @반품
*/
공개 정적 int getPoolMax(int maskBit)
{
if (마스크비트 <= 0 || 마스크비트 >= 32)
{
0을 반환합니다.
}
return (int) Math.pow(2, 32 - 마스크비트) - 2;
}
개인 정적 StringBuffer toBin(int x)
{
StringBuffer 결과 = 새로운 StringBuffer();
결과.추가(x % 2);
x /= 2;
동안(x>0)
{
결과.추가(x % 2);
x /= 2;
}
결과 반환;
}
/*
* 모든 마스크 비트와 해당 마스크 키:마스크 비트 값:마스크(xxxx)를 저장합니다.
*/
비공개 정적 Map<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");
마스크비트를 반환합니다.
}
/**
* 마스크 비트를 기반으로 마스크 가져오기
*
* @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;
}
}