现在的位置: 首页 > 综合 > 正文

一个简单的子网划分程序(java)subnetting

2018年05月03日 ⁄ 综合 ⁄ 共 5188字 ⁄ 字号 评论关闭
/**
*  划分子网
*/
//
import java.io.*;

public class subnetting{
	
	public static void main(String [] args)throws IOException{

		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));
		}
		//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));
		}
		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)+"."+255.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("☆☆--子--网--☆--划---分--☆--完--毕--☆☆");
	
	}
}

抱歉!评论已关闭.