일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- HLS
- golang
- 행정구역분류
- Kubernetes
- wireshark
- ebpf
- kubectl
- spring cloud config
- aws cli
- Sysinternals
- macos
- Java
- Shell script
- ffmpeg
- configmap
- Windows10
- Python
- nginx-media-server
- VSCode
- service
- aws
- deployment
- android studio
- Android
- Flutter
- Pod
- dart
- RTMP
- namespace
- docker
Archives
- Today
- Total
woonizzooni
IPv4 네트워크 접두어 길이 구하기 = CIDR Prefix Length 구하기 본문
CIDR (Classless Inter-Domain Routing)
https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing
IPv4 CIDR blocks
subnetmask입력시 prefix legnth를 구해본다. (CIDR계산 방법 이해 전제하에 작성함)
ex) subnetmask가
- "255.255.255.0"이면 24반환
- "299.255.255.0"이면 throws UnknownHostException
- "255.255.241.0"이면 -1반환 (비정상 subnetmask)
public int convertNetmaskToPfxLength(String subnetmask) throws UnknownHostException {
InetAddress netmask = InetAddress.getByName(subnetmask);
byte[] netmaskBytes = netmask.getAddress();
int pfxLength = 0;
boolean zero = false;
for (byte b : netmaskBytes) {
int mask = 0x80;
for (int i = 0; i < 8; i++) {
int result = b & mask;
if (result == 0) {
zero = true;
} else if (zero) {
return -1;
} else {
pfxLength++;
}
mask >>>= 1;
}
}
return pfxLength;
}
이번에는 반대로 prefix length로 subnetmask 문자열을 표시해본다.
ex) 0이면 255.255.255.255
-1이면 'invalid prefixLength" exception
24면 255.255.255.0
public InetAddress convertPrefixLengthToNetmask(int prefixLength) throws UnknownHostException {
if (prefixLength > 32 || prefixLength < 0) {
throw new IllegalArgumentException("Invalid prefixLength");
}
int mask = 0xffffffff << 32 - prefixLength;
byte[] netmaskBytes = new byte[] { (byte) (mask >>> 24), (byte) (mask >> 16 & 0xff),
(byte) (mask >> 8 & 0xff), (byte) (mask & 0xff) };
return InetAddress.getByAddress(netmaskBytes);
}
이해를 돕고자 참고 링크 하나 더 추가. (앞 2개 박스는 결과로, Binary는 bit shift 및 masking에...)
https://kb.wisc.edu/page.php?id=3493
어라 정리하다보니...
IPv4/IPv6 다 지원하는 오픈소스SW가 있네. 더 시간이 남아도는 사람들은 참고해보자.
https://seancfoley.github.io/IPAddress/
https://github.com/seancfoley/IPAddress
'Programming > Java' 카테고리의 다른 글
대한민국 행정동 경계 좌표 추출 #3 - java > GeoJSON (3) | 2019.09.06 |
---|---|
Java Decompiler 종류 (0) | 2019.08.25 |
java tip : 파일을 가장 빨리 읽는 방법 / 효과적인 방법 (0) | 2019.06.13 |
Java 버전별 내용 참고 (0) | 2019.06.13 |
Comments