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 |
일상을 기록하자
2018년 8월 22일 수요일
IP주소의 마스크 브로드 캐스팅 확인 코드
피드 구독하기:
글 (Atom)
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...