본문 바로가기
SpringBoot

[SpringBoot] CIDR 주소체계 계산을 도와주는 SubnetUtils

by 띵앤띵 2023. 1. 19.
728x90

네트워크 체계 CIDR (사이더)에 대해서 JAVA 코드로 구현해야하는 요구사항이 생겼다.

 

https://kim-dragon.tistory.com/9

 

[네트워크] CIDR이란?(사이더 란?)

오늘은 CIDR에 대해서 설명해보도록 하겠습니다. 네트워크 설계를 하면서 가장 많이 접하게 될 개념이 CIDR입니다. 사이더라고 부릅니다. CIDR의 full name은 Classless Inter-Domain Routing 으로 클래스 없는

kim-dragon.tistory.com

 

해당 글에 CIDR 개념에 대해 잘 정리되어있다.

 

이를 자바 코드로 구현할 필요는 없이 !! gradle 라이브러리 추가하면된다.

 

개발을 하다 보면 IP 처리를 위한 여러 가지 작업을 할 때가 있습니다. 그럴 경우 사용 가능한

CIDR 주소체계에 대한 계산을 해주는 유틸 클래스가 있어 소개해 보려 합니다.

해당 CIDR의 시작 IP, 끝IP, Broadcast IP, Network IP,IP 포함 여부등을 확인할 수 있습니다.

 

SubnetUtils

 
maven
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.6</version>
</dependency>
gradle

// https://mvnrepository.com/artifact/commons-net/commons-net
implementation group: 'commons-net', name: 'commons-net', version: '3.6'

 

SubnetTest.java

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
package subnet;
 
import org.apache.commons.net.util.SubnetUtils;
 
public class SubnetTest {
    public static void main(String[] args) {
 
        SubnetUtils subnetUtils = new SubnetUtils("120.131.5.130/26");
        subnetUtils.setInclusiveHostCount(true);    //network,broadcast ip 포함, false:불포함
 
        System.out.println("넷마스크:" + subnetUtils.getInfo().getNetmask());
        System.out.println("네트워크 IP:" + subnetUtils.getInfo().getNetworkAddress());
        System.out.println("브로드캐스트 IP:" + subnetUtils.getInfo().getBroadcastAddress());
 
        System.out.println("시작 IP:" + subnetUtils.getInfo().getLowAddress());
        System.out.println("끝 IP:" + subnetUtils.getInfo().getHighAddress());
        System.out.println("120.131.5.130 해당 대역의 포함여부: " + subnetUtils.getInfo().isInRange("120.131.5.130"));
        System.out.println("120.131.5.234 해당 대역의 포함여부: " + subnetUtils.getInfo().isInRange("120.131.5.234"));
        String[] allAddresses = subnetUtils.getInfo().getAllAddresses();
        System.out.println("===사용가능한 IP 리스트 시작===");
        for (String allAddress : allAddresses) {
            System.out.println(allAddress);
        }
    }
}
 
cs

subnetUtils.setInclusiveHostCount(true) 라인의 true, false 옵션에 따라 network, boardcast IP 포함 여부를 결정할 수 있습니다.

 

OUTPUT

넷마스크:255.255.255.192

네트워크 IP:120.131.5.128

브로드캐스트 IP:120.131.5.191

시작 IP:120.131.5.128

끝 IP:120.131.5.191

120.131.5.130 해당 대역의 포함여부: true

120.131.5.234 해당 대역의 포함여부: false

===사용가능한 IP 리스트 시작===

120.131.5.128

120.131.5.129

120.131.5.130

120.131.5.131

120.131.5.132

120.131.5.133

120.131.5.134

120.131.5.135

120.131.5.136

120.131.5.137

120.131.5.138

...

 

 

 

참고 : https://warpgate3.tistory.com/entry/CIDR-%EC%A3%BC%EC%86%8C%EC%B2%B4%EA%B3%84-%EA%B3%84%EC%82%B0%EC%9D%84-%EB%8F%84%EC%99%80%EC%A3%BC%EB%8A%94-%EC%9E%90%EB%B0%94-Util-%ED%81%B4%EB%9E%98%EC%8A%A4-1

반응형

댓글