import java.io.*;/n/npublic class SubnetCalculator {/n public static void main(String[] args) throws IOException {/n BufferedReader br = new BufferedReader(new InputStreamReader(System.in));/n String ip = ''; // 要划分的IP地址/n int subnetNum = 0; // 要划分成的子网数/n int bitNum = 0; // 每个子网对应的二进制位数/n/n System.out.println('---------------划分子网---------------');/n // 输入要划分的IP地址:ip/n System.out.println('请输入要划分的IP地址(格式为:x1.x2.x3.x4):');/n System.out.print('→:');/n ip = br.readLine();/n/n // 将IP地址按照'.'分割成四段,并将每段转化为整数/n String[] parts = ip.split('//.');/n int[] ipParts = new int[4];/n for (int i = 0; i < 4; i++) {/n ipParts[i] = Integer.parseInt(parts[i]);/n }/n/n // 根据IP地址的类别,计算可划分的最大子网数/n int maxSubnetNum = 0;/n if (ipParts[0] >= 1 && ipParts[0] <= 126) { // A类地址/n maxSubnetNum = (int) Math.pow(2, 24 - 2) - 2;/n } else if (ipParts[0] >= 128 && ipParts[0] <= 191) { // B类地址/n maxSubnetNum = (int) Math.pow(2, 16 - 2) - 2;/n } else if (ipParts[0] >= 192 && ipParts[0] <= 223) { // C类地址/n maxSubnetNum = (int) Math.pow(2, 8 - 2) - 2;/n }/n System.out.println('本IP地址能划分的最大子网数为: ' + maxSubnetNum);/n/n // 输入要划分的子网数/n System.out.println('请输入要划分的子网数:');/n System.out.print('→:');/n subnetNum = Integer.parseInt(br.readLine());/n/n // 根据要划分的子网数,计算每个子网对应的二进制位数/n for (bitNum = 1; Math.pow(2, bitNum) - 2 < subnetNum; bitNum++) ;/n/n System.out.println('--------------------------------------');/n // 计算子网掩码/n int mask = 0;/n for (int i = 0; i < bitNum; i++) {/n mask += Math.pow(2, 7 - i);/n }/n System.out.println('子网掩码为:' + getIpString(mask));/n/n // 计算每个子网中可用的主机数/n int hostNum = (int) Math.pow(2, 32 - bitNum) - 2;/n System.out.println('每个子网中可用的主机数为:' + hostNum);/n/n // 计算每个子网的网络地址和广播地址,并输出子网范围/n System.out.println('各子网IP范围如下:');/n int subnetId = 0;/n if (ipParts[0] >= 1 && ipParts[0] <= 126) { // A类地址/n if (bitNum <= 8) {/n for (int i = 1, subId = 0; i < Math.pow(2, bitNum) - 1; i++) {/n subId = (int) Math.pow(2, (8 - bitNum)) * i;/n subnetId++;/n System.out.println('<' + subnetId + '> ' + getIpString(ipParts[0]) + '.' + subId + '.0.1' + ' - ' + getIpString(ipParts[0]) + '.' + (subId + (int) Math.pow(2, (8 - bitNum)) - 2) + '.255.254');/n }/n } else if (bitNum > 8 && bitNum <= 16) {/n bitNum -= 8;/n int subId = 0;/n for (int i = 0; i < Math.pow(2, 8); i++) {/n if (i == 0) {/n for (int k = 1; k <= Math.pow(2, bitNum) - 1; k++) {/n subId = (int) Math.pow(2, (16 - bitNum)) * k;/n subnetId++;/n System.out.println('<' + subnetId + '> ' + getIpString(ipParts[0]) + '.' + i + '.' + subId + '.1' + ' - ' + getIpString(ipParts[0]) + '.' + i + '.' + (subId + (int) Math.pow(2, (16 - bitNum))) + '.254');/n }/n } else {/n for (int k = 0; k <= Math.pow(2, bitNum) - 1; k++) {/n if (i == 255 && k == (Math.pow(2, bitNum) - 1)) {/n break;/n }/n subId = (int) Math.pow(2, (16 - bitNum)) * k;/n subnetId++;/n System.out.println('<' + subnetId + '> ' + getIpString(ipParts[0]) + '.' + i + '.' + subId + '.1' + ' - ' + getIpString(ipParts[0]) + '.' + i + '.' + (subId + (int) Math.pow(2, (16 - bitNum))) + '.254');/n }/n }/n }/n } else if (bitNum > 16 && bitNum < 24) {/n bitNum -= 16;/n int subId = 0;/n for (int m = 0; m < Math.pow(2, 8); m++) {/n if (m == 0) {/n for (int i = 0; i < Math.pow(2, 8); i++) {/n if (i == 0/

Java子网划分计算器:实现交互式IP地址子网划分

原文地址: https://www.cveoy.top/t/topic/octK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录