Java Subnet Calculator: Calculate Subnet Address, Mask, and Hosts
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
原文地址: https://www.cveoy.top/t/topic/bWyv 著作权归作者所有。请勿转载和采集!