2018년 8월 22일 수요일

IP주소의 마스크 브로드 캐스팅 확인 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import java.util.ArrayList;
import java.util.List;
 
/*
 * Created on 2018/05/21
 *
 * $Id$
 * $copyright$
 *
 */
 
public class IPAddressValidate {
 
    public IPAddressValidate(String ipAddress) {
        IPAddressValid(ipAddress);
    }
 
    public void IPAddressValid(String ipAddress) {
        // Dot Position Index
        int dotIndexList[] = new int[4];
        // IP Address Index
        int ipIndexList[] = new int[4];
        int dotIndex = 0;
        for (int i = 0; i < dotIndexList.length; i++) {
            String searchText = i == (dotIndexList.length - 1) ? "/" : ".";
            int tmpDotIndex = i == 0 ? dotIndex : (dotIndex + 1);
            dotIndex = ipAddress.indexOf(searchText, (dotIndex + 1));
            dotIndexList[i] = dotIndex;
            // dot check
            if (dotIndex == -1 && i != (dotIndexList.length - 1)) {
                System.out.println("Dot Error");
            }
            dotIndex = dotIndex == -1 ? ipAddress.length() : dotIndex;
            ipIndexList[i] = Integer.parseInt(ipAddress.substring(tmpDotIndex, dotIndex));
        }
 
        // IP_Address check
        for (int i = 0; i < ipIndexList.length; i++) {
            if (ipIndexList[i] < 0 && ipIndexList[i] > 255) {
                System.out.println("IP Address Error");
            }
        }
 
        if (dotIndexList[3!= -1) {
            subNetValidate(ipAddress, dotIndexList, ipIndexList);
        }
    }
 
    public void subNetValidate(String ipAddress, int[] dotIndexList, int[] ipIndexList) {
        // SubNet Mask check
        int subNet = Integer.parseInt(ipAddress.substring(dotIndexList[3+ 1, ipAddress.length()));
        if (subNet < 1 || subNet > 32) {
            System.out.println("SubNet Error");
        }
 
        // 아이피 변환 대상 클래스(뒤에서 부터 카운팅)
        int tmpNetMask = (32 - subNet);
        int bitIndex = 1;
        while (tmpNetMask > 8) {
            tmpNetMask -= 8;
            bitIndex++;
        }
        // 10진수에서 2진수로 치환
        String networkBits[] = new String[4];
        for (int i = 0; i < networkBits.length; i++) {
            networkBits[i] = Integer.toBinaryString(ipIndexList[i]);
        }
        // 0:네트워크 아이디, 1:브로드 캐스팅
        List<String> networtData = new ArrayList<String>();
        for (int k = 0; k < 2; k++) {
            // 10진수에서 2진수로 치환시 누락된 0을 추가
            for (int i = 0; i < 4; i++) {
                int lens = networkBits[i].length();
                if (lens < 8) {
                    String zeroNum = "";
                    for (int j = 0; j < (8 - lens); j++) {
                        zeroNum += "0";
                    }
                    networkBits[i] = zeroNum + networkBits[i];
                }
            }
            // 서브넷 마스크에 맞춰서 비트들 치환
            int chageBitCnt = (32 - subNet);
            for (int i = 3; i > (3 - bitIndex); i--) {
                String changeNetBitNum = networkBits[i];
                String selectBitNum = (k == 0 ? "0" : "1");
                String tmpBits = "";
                for (int j = 0; j < 8; j++) {
                    if (chageBitCnt == 0)
                        break;
                    tmpBits += selectBitNum;
                    chageBitCnt--;
                }
                networkBits[i] = changeNetBitNum.substring(0, (8 - tmpBits.length())) + tmpBits;
            }
            //2진수를 10진수로 치환
            String networks = "";
            for (int i = 0; i < 4; i++) {
                networks += Integer.parseInt(networkBits[i], 2);
                if (i != 3) {
                    networks += ".";
                }
            }
            networtData.add(networks);
        }
        // 네트워크 아이디, 브로드 캐스팅 출력
        String ipChecker = ipAddress.substring(0, dotIndexList[3]);
        for (String subNetString : networtData) {
            if (ipChecker.equals(subNetString)) {
                System.out.println("SubNetIPAddress Error");
            }
            System.out.println(subNetString);
        }
    }
 
    public static void main(String[] args) {
        String ipAddress = "192.168.1.0/1";
        new IPAddressValidate(ipAddress);
    }
}
 
cs

IP주소의 마스크 브로드 캐스팅 확인 코드

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50...