Java VLSM 子网划分器:超网掩码、IP 范围计算
package 子网划分器;
import java.io.*;
public class VLSM {
/**
* @param args
*/
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);
br.close();
// 求所输入子网数对应的二进制位数: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));
}
String mask = '';
// A类
if (x1 > 0 && x1 <= 126) {
if (n <= 8) {
mask = '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));
}
mask = '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));
}
mask = '255.255.255.' + sum;
}
System.out.println('超网掩码为:' + mask);
}
// B类
if (x1 >= 128 && x1 <= 191) {
if (n <= 8) {
mask = '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));
}
mask = '255.255.255.' + sum;
}
System.out.println('超网掩码为:' + mask);
}
// C类
if (x1 >= 192 && x1 <= 223) {
mask = '255.255.255.' + sum;
System.out.println('超网掩码为:' + mask);
}
System.out.println('子网掩码为:' + mask);
// 计算超网地址和广播地址
int currentNetId = 0;
int currentHostId = 1;
String currentIP = x1 + '.' + x2 + '.' + x3 + '.' + currentHostId;
String lastIP = '';
String broadcastIP = '';
while (true) {
if ((currentHostId & ((int) Math.pow(2, (n - 1))) - 1) == 0) {
if (!lastIP.isEmpty()) {
broadcastIP = currentIP.substring(0, currentIP.lastIndexOf('.')) + '.' + (currentHostId - 2);
System.out.println('子网' + currentNetId + '的 IP 范围:' + lastIP + ' 到 ' + broadcastIP);
}
lastIP = currentIP;
currentNetId++;
// B类地址,当网络号是0的时候跳过,因为这个地址保留不使用
if (x1 >= 128 && x1 <= 191 && currentNetId == 1) {
currentNetId++;
}
if (currentNetId == s) {
break;
}
}
currentHostId++;
currentIP = x1 + '.' + x2 + '.' + x3 + '.' + currentHostId;
}
broadcastIP = currentIP.substring(0, currentIP.lastIndexOf('.')) + '.' + (currentHostId - 2);
System.out.println('子网' + currentNetId + '的 IP 范围:' + lastIP + ' 到 ' + broadcastIP);
System.out.println('--------------------------------------');
System.out.println('超网地址为:' + ip + '/' + n);
System.out.println('广播地址为:' + broadcastIP);
}
}
程序说明:
该程序实现了 VLSM 子网划分功能,可以根据用户输入的 IP 地址和子网数量,计算超网掩码、子网掩码以及每个子网的 IP 范围。程序主要分为以下几个部分:
- 输入 IP 地址和子网数量: 程序首先提示用户输入要划分的 IP 地址和子网数量。
- 计算超网掩码: 程序根据用户输入的 IP 地址和子网数量,计算出超网掩码。
- 计算子网掩码: 程序根据超网掩码计算出子网掩码。
- 计算每个子网的 IP 范围: 程序根据超网掩码和子网数量计算出每个子网的 IP 范围。
- 输出结果: 程序将计算结果输出到控制台。
代码示例:
假设用户输入的 IP 地址为 192.168.1.0,子网数量为 4。程序将输出以下结果:
---------------划分子网---------------
请输入要划分的IP地址(格式为:x1.x2.x3.x4):
→:192.168.1.0
请输入要划分的子网数:
→:4
--------------------------------------
超网掩码为:255.255.255.240
子网掩码为:255.255.255.240
子网0的 IP 范围:192.168.1.1 到 192.168.1.14
子网1的 IP 范围:192.168.1.15 到 192.168.1.30
子网2的 IP 范围:192.168.1.31 到 192.168.1.46
子网3的 IP 范围:192.168.1.47 到 192.168.1.62
--------------------------------------
超网地址为:192.168.1.0/4
广播地址为:192.168.1.62
程序特点:
该程序实现了 VLSM 子网划分功能,并提供了以下特点:
- 支持 A 类、B 类和 C 类 IP 地址。
- 可以根据用户输入的子网数量,自动计算超网掩码和子网掩码。
- 可以计算每个子网的 IP 范围,并输出到控制台。
应用场景:
该程序可以应用于以下场景:
- 网络管理员可以使用该程序来进行子网划分,以优化网络资源的使用。
- 学生可以使用该程序来学习 VLSM 子网划分原理。
- 开发人员可以使用该程序来实现网络管理工具。
扩展:
该程序可以扩展以下功能:
- 支持 IPv6 地址。
- 提供图形界面。
- 保存计算结果到文件。
代码解释:
代码中使用了 BufferedReader 类来读取用户输入,并使用 String 类和 Integer 类来处理字符串和数字。代码还使用了 Math.pow() 方法来进行幂运算,以及 & 运算符来进行位运算。
总结:
本程序实现了 VLSM 子网划分功能,可以根据用户输入的 IP 地址和子网数量,计算超网掩码、子网掩码以及每个子网的 IP 范围。该程序可以应用于网络管理、学习和开发等多个场景。
原文地址: https://www.cveoy.top/t/topic/ojuW 著作权归作者所有。请勿转载和采集!