import java.io.*;

public class SubnetCalculator { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String ip; // 用于接收要划分的IP int s; // 用于接收以要划分的子网数 int n; // 输入子网数对应的二进制位数

    System.out.println("---------------划分子网---------------");
    // 输入要划分的IP地址:ip
    System.out.println("请输入要划分的IP地址(格式为:x1.x2.x3.x4):");
    System.out.print("→:");
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    ip = br.readLine();

    // 截取x1
    int index1 = ip.indexOf('.');
    String st1 = ip.substring(0, index1);
    int x1 = Integer.parseInt(st1);// 把String类型的st转化成int型

    // 截取x2
    int index2 = ip.indexOf('.', index1 + 1);
    String st2 = ip.substring(index1 + 1, index2);
    int x2 = Integer.parseInt(st2);// 把String类型的st转化成int型

    // 截取x3
    int index3 = ip.indexOf('.', index2 + 1);
    String st3 = ip.substring(index2 + 1, index3);
    int x3 = Integer.parseInt(st3);// 把String类型的st转化成int型

    // 截取x4
    // A类
    if (x1 > 0 && x1 <= 126) {
        System.out.println("本IP地址能划分的最大子网数为: " + ((int) Math.pow(2, 24 - 2) - 2));
    }
    // B类
    if (x1 >= 128 && x1 <= 191) {
        System.out.println("本IP地址能划分的最大子网数为: " + ((int) Math.pow(2, 16 - 2) - 2));
    }
    // C类
    if (x1 >= 192 && x1 <= 223) {
        System.out.println("本IP地址能划分的最大子网数为: " + ((int) Math.pow(2, 8 - 2) - 2));
    }

    // 输入要划分的子网数数:s
    System.out.println("请输入要划分的子网数:");
    System.out.print("→:");

    String subnet_num = br.readLine();
    s = Integer.parseInt(subnet_num);

    // 求所输入子网数对应的二进制位数:n
    for (n = 1; (Math.pow(2, n) - 2) < s; n++)
        ;

    System.out.println("--------------------------------------");
    // 求子网掩码
    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum = sum + (int) Math.pow(2, (7 - i));
    }
    System.out.println("子网掩码为:");
    // A类
    if (x1 > 0 && x1 <= 126) {
        if (n <= 8) {
            System.out.println("255." + sum + ".0.0");
        } else if (n > 8 && n <= 16) {
            n = n - 8;
            sum = 0;
            for (int i = 0; i < n; i++) {
                sum = sum + (int) Math.pow(2, (7 - i));
            }
            System.out.println("255.255." + sum + ".0");
        } else {
            n = n - 16;
            sum = 0;
            for (int i = 0; i < n; i++) {
                sum = sum + (int) Math.pow(2, (7 - i));
            }
            System.out.println("255.255.255." + sum);
        }

    }
    // B类
    if (x1 >= 128 && x1 <= 191) {
        if (n <= 8) {
            System.out.println("255.255." + sum + ".0");
        } else {
            n = n - 8;
            sum = 0;
            for (int i = 0; i < n; i++) {
                sum = sum + (int) Math.pow(2, (7 - i));
            }
            System.out.println("255.255.255." + sum);
        }

    }
    // C类
    if (x1 >= 192 && x1 <= 223) {
        System.out.println("255.255.255." + sum);
    }
    // 求每网段主机数
    System.out.println("每网段主机数:");
    // A类
    if (x1 > 0 && x1 <= 126) {
        System.out.println(Math.pow(2, (32 - n)) - 2);
    }
    // B类
    if (x1 >= 128 && x1 <= 191) {
        System.out.println(Math.pow(2, (16 - n)) - 2);
    }
    // C类
    if (x1 >= 192 && x1 <= 223) {
        System.out.println(Math.pow(2, (8 - n)) - 2);
    }
    // 输出各子网IP范围
    System.out.println("各子网IP范围如下:");
    // A类
    if (x1 > 0 && x1 <= 126) {
        if (n <= 8) {
            for (int i = 1, sub_id = 0; i < Math.pow(2, n) - 1; i++) {
                sub_id = (int) Math.pow(2, (8 - n)) * i;
                System.out.print("<" + i + ">" + " ");
                System.out.println(x1 + "." + sub_id + ".0." + 1 + "---" + x1 + "." + (int) (sub_id + Math.pow(2, (8 - n)) - 1) + "." + 254);
            }
        }

        if (n > 8 && n <= 16) {
            int subnet_id = 0;// 定义子网号
            for (int i = 0; i < Math.pow(2, 8); i++) {
                if (i == 0) {
                    for (int k = 1, sub_id = 0; k <= Math.pow(2, n - 8) - 1; k++) {
                        sub_id = (int) Math.pow(2, (16 - n)) * k;
                        System.out.print("<" + (++subnet_id) + ">" + " ");
                        System.out.println(x1 + "." + i + "." + sub_id + "." + 1 + "------" + x1 + "." + i + "." + (sub_id + (int) Math.pow(2, (16 - n))) + "." + 254);
                    }
                } else {
                    for (int k = 0, sub_id = 0; k <= Math.pow(2, n - 8) - 1; k++) {
                        if ((i == 255) && k == (Math.pow(2, n - 8) - 1)) {
                            break;
                        }
                        sub_id = (int) Math.pow(2, (16 - n)) * k;
                        System.out.print("<" + (++subnet_id) + ">" + " ");
                        System.out.println(x1 + "." + i + "." + (sub_id) + "." + 1 + "------" + x1 + i + "." + (sub_id + (int) Math.pow(2, (16 - n))) + "." + 254);
                    }
                }
            }
        }

        if (n > 16 && n < 24) {
            int subnet_id = 0;// 定义子网号
            for (int m = 0; m < Math.pow(2, 8); m++) {
                if (m == 0) {
                    for (int i = 0; i < Math.pow(2, 8); i++) {
                        if (i == 0) {
                            for (int k = 1, sub_id = 0; k <= Math.pow(2, n - 16) - 1; k++) {
                                sub_id = (int) Math.pow(2, (24 - n)) * k;
                                System.out.print("<" + (++subnet_id) + ">" + " ");
                                System.out.println(x1 + "." + m + "." + i + "." + (sub_id + 1) + "------" + x1 + "." + m + "." + i + "." + (sub_id + (int) Math.pow(2, (24 - n)) - 2));
                            }
                        } else {
                            for (int k = 0, sub_id = 0; k <= Math.pow(2, n - 16) - 1; k++) {
                                sub_id = (int) Math.pow(2, (24 - n)) * k;
                                System.out.print("<" + (++subnet_id) + ">" + " ");
                                System.out.println(x1 + "." + m + "." + i + "." + (sub_id + 1) + "------" + x1 + "." + m + "." + i + "." + (sub_id + (int) Math.pow(2, (24 - n)) - 2));
                            }
                        }
                    }
                } else {
                    for (int i = 0; i < Math.pow(2, 8); i++) {
                        for (int k = 0, sub_id = 0; k <= Math.pow(2, n - 16) - 1; k++) {
                            if (m == 255 && (i == 255) && k == (Math.pow(2, n - 16) - 1)) {
                                break;
                            }
                            sub_id = (int) Math.pow(2, (24 - n)) * k;
                            System.out.print("<" + (++subnet_id) + ">" + " ");
                            System.out.println(x1 + "." + m + "." + i + "." + (sub_id + 1) + "------" + x1 + "." + m + "." + i + "." + (sub_id + (int) Math.pow(2, (24 - n)) - 2));
                        }
                    }
                }
            }
        }
    }

    // B类
    if (x1 >= 128 && x1 <= 191) {
        if (n <= 8) {
            for (int i = 1, sub_id = 0; i < Math.pow(2, n) - 1; i++) {
                sub_id = (int) Math.pow(2, (8 - n)) * i;
                System.out.print("<" + i + ">" + " ");
                System.out.println(x1 + "." + x2 + "." + sub_id + "." + 1 + "---" + x1 + "." + x2 + "." + (int) (sub_id + Math.pow(2, (8 - n)) - 1) + "." + 254);
            }
        }

        if (n > 8 && n < 16) {
            int subnet_id = 0;// 定义子网号
            for (int i = 0; i < Math.pow(2, 8); i++) {
                if (i == 0) {
                    for (int k = 1, sub_id = 0; k <= Math.pow(2, n - 8) - 1; k++) {
                        sub_id = (int) Math.pow(2, (16 - n)) * k;
                        System.out.print("<" + (++subnet_id) + ">" + " ");
                        System.out.println(x1 + "." + x2 + "." + i + "." + (sub_id + 1) + "------" + x1 + "." + x2 + "." + i + "." + (sub_id + (int) Math.pow(2, (16 - n)) - 2));
                    }
                } else {
                    for (int k = 0, sub_id = 0; k <= Math.pow(2, n - 8) - 1; k++) {
                        if ((i == 255) && k == (Math.pow(2, n - 8) - 1)) {
                            break;
                        }
                        sub_id = (int) Math.pow(2, (16 - n)) * k;
                        System.out.print("<" + (++subnet_id) + ">" + " ");
                        System.out.println(x1 + "." + x2 + "." + i + "." + (sub_id + 1) + "------" + x1 + "." + x2 + "." + i + "." + (sub_id + (int) Math.pow(2, (16 - n)) - 2));
                    }
                }
            }
        }
    }

    // C类
    if (x1 >= 192 && x1 <= 223) {
        for (int i = 1, sub_id = 0; i < Math.pow(2, n) - 1; i++) {
            sub_id = (int) Math.pow(2, (8 - n)) * i;
            System.out.print("<" + i + ">" + " ");
            System.out.println(x1 + "." + x2 + "." + x3 + "." + (sub_id + 1) + "---" + x1 + "." + x2 + "." + x3 + "." + ((int) sub_id + Math.pow(2, (8 - n)) - 2));
        }
    }
    System.out.println("子网划分完毕");

}

}

Java子网划分计算器 - IP地址子网划分工具

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

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