import java.util.Scanner;

public class SubnetCalculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);

    System.out.print("Enter network address: ");
    String networkAddress = scanner.nextLine();

    System.out.print("Enter subnet mask: ");
    String subnetMask = scanner.nextLine();

    System.out.print("Enter number of hosts per subnet: ");
    int hostsPerSubnet = scanner.nextInt();

    int subnetBits = calculateSubnetBits(hostsPerSubnet);
    int subnets = (int) Math.pow(2, subnetBits);

    System.out.println("Number of subnets: ' + subnets);

    String[] networkAddressParts = networkAddress.split("\\.");
    String[] subnetMaskParts = subnetMask.split("\\.");

    int[] networkAddressInt = new int[4];
    int[] subnetMaskInt = new int[4];

    for (int i = 0; i < 4; i++) {
        networkAddressInt[i] = Integer.parseInt(networkAddressParts[i]);
        subnetMaskInt[i] = Integer.parseInt(subnetMaskParts[i]);
    }

    int[] subnetAddressInt = calculateSubnetAddress(networkAddressInt, subnetMaskInt, subnetBits);
    String[] subnetAddressParts = new String[4];

    for (int i = 0; i < 4; i++) {
        subnetAddressParts[i] = String.valueOf(subnetAddressInt[i]);
    }

    System.out.println("Subnet address: ' + String.join(".", subnetAddressParts));

    String[] subnetMaskBinaryParts = calculateSubnetMaskBinary(subnetMaskInt);
    String[] subnetMaskBinaryPartsModified = modifySubnetMaskBinary(subnetMaskBinaryParts, subnetBits);

    String[] subnetMaskPartsModified = new String[4];

    for (int i = 0; i < 4; i++) {
        subnetMaskPartsModified[i] = Integer.toString(Integer.parseInt(subnetMaskBinaryPartsModified[i], 2));
    }

    System.out.println("Subnet mask: ' + String.join(".", subnetMaskPartsModified));

    int maxHostsPerSubnet = (int) Math.pow(2, 32 - subnetBits) - 2;
    System.out.println("Maximum hosts per subnet: ' + maxHostsPerSubnet);
}

public static int calculateSubnetBits(int hostsPerSubnet) {
    int subnetBits = 0;

    while (Math.pow(2, subnetBits) - 2 < hostsPerSubnet) {
        subnetBits++;
    }

    return subnetBits;
}

public static int[] calculateSubnetAddress(int[] networkAddressInt, int[] subnetMaskInt, int subnetBits) {
    int[] subnetAddressInt = new int[4];

    for (int i = 0; i < 4; i++) {
        subnetAddressInt[i] = networkAddressInt[i] & subnetMaskInt[i];
    }

    int hostBits = 32 - subnetBits;

    if (hostBits > 0) {
        int subnetNumber = (int) Math.pow(2, hostBits);
        subnetAddressInt[3] = subnetAddressInt[3] - subnetAddressInt[3] % subnetNumber;
    }

    return subnetAddressInt;
}

public static String[] calculateSubnetMaskBinary(int[] subnetMaskInt) {
    String[] subnetMaskBinaryParts = new String[4];

    for (int i = 0; i < 4; i++) {
        subnetMaskBinaryParts[i] = Integer.toBinaryString(subnetMaskInt[i]);
        subnetMaskBinaryParts[i] = String.format("%8s", subnetMaskBinaryParts[i]).replace(" ", "0");
    }

    return subnetMaskBinaryParts;
}

public static String[] modifySubnetMaskBinary(String[] subnetMaskBinaryParts, int subnetBits) {
    String[] subnetMaskBinaryPartsModified = subnetMaskBinaryParts.clone();
    int fullBytes = subnetBits / 8;

    for (int i = fullBytes; i < 4; i++) {
        subnetMaskBinaryPartsModified[i] = "00000000";
    }

    int remainingBits = subnetBits % 8;

    if (remainingBits > 0) {
        String modifiedByte = subnetMaskBinaryPartsModified[fullBytes].substring(0, remainingBits) + subnetMaskBinaryPartsModified[fullBytes].substring(remainingBits).replaceAll("1", "0");
        subnetMaskBinaryPartsModified[fullBytes] = modifiedByte;
    }

    return subnetMaskBinaryPartsModified;
}

}

// 演示输出内容 Enter network address: 192.168.1.0 Enter subnet mask: 255.255.255.0 Enter number of hosts per subnet: 30 Number of subnets: 4 Subnet address: 192.168.1.0 Subnet mask: 255.255.255.192 Maximum hosts per subnet: 62

Java Subnet Calculator: Calculate Subnet Address, Mask, and Hosts

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

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