判断两个IP是否属于同一子网

描述
子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。
子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为“1”和主机号部分全为“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。

示例:
I P 地址  192.168.0.1
子网掩码  255.255.255.0

转化为二进制进行运算:

I P 地址 11010000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000

AND运算
     11000000.10101000.00000000.00000000

转化为十进制后为:
     192.168.0.0

I P 地址  192.168.0.254
子网掩码  255.255.255.0

转化为二进制进行运算:

I P 地址 11010000.10101000.00000000.11111110
子网掩码 11111111.11111111.11111111.00000000

AND运算
     11000000.10101000.00000000.00000000

转化为十进制后为:
     192.168.0.0

通过以上对两台计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0,所以这二台计算机可视为是同一子网络。

/* 
* 功能: 判断两台计算机IP地址是同一子网络。 
* 输入参数:    String Mask: 子网掩码,格式:“255.255.255.0”; 
*               String ip1: 计算机1的IP地址,格式:“192.168.0.254”;
*               String ip2: 计算机2的IP地址,格式:“192.168.0.1”;
*

* 返回值:      0:IP1与IP2属于同一子网络;     1:IP地址或子网掩码格式非法;    2:IP1与IP2不属于同一子网络
*/ 
public int checkNetSegment(String mask, String ip1, String ip2) 
{     
    /*在这里实现功能*/
    return 0;
}

知识点 字符串
运行时间限制 10M
内存限制 128
输入
输入子网掩码、两个ip地址

输出
得到计算结果

样例输入 255.255.255.0 192.168.224.256 192.168.10.4
样例输出 1
package com.oj;

import java.util.Scanner;

public class TestOj {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		//String input = in.nextLine();
		String[] data = new String[3];
		data[0] = in.nextLine();
		data[1] = in.nextLine();
		data[2] = in.nextLine();
		if(data.length!=3){
			System.out.println("1");
			return ;
		}
		String[] masks = data[0].split("\\.");
		String[] ips = data[1].split("\\.");
		String[] ips2 = data[2].split("\\.");

		if(masks.length!=4||ips.length!=4||ips2.length!=4){
			System.out.println("1");
			return ;
		}

		int[] mask = new int[4];
		int[] ip = new int[4];
		int[] ip2 = new int[4];
		for(int i = 0;i < 4; i++){
			try{
				mask[i] = Integer.parseInt(masks[i]);
				ip[i] = Integer.parseInt(ips[i]);
				ip2[i] = Integer.parseInt(ips2[i]);
				if(mask[i]<0&&mask[i]>255){
					System.out.println("1");
					return;
				}

				if(ip[i]<0&&ip[i]>255){
					System.out.println("1");
					return;
				}

				if(ip2[i]>0&&ip2[i]>255){
					System.out.println("1");
					return;
				}
			}catch(Exception e){
				System.out.println("1");
				return;
			}
		}

		StringBuilder masksb = new StringBuilder();
		StringBuilder ipsb = new StringBuilder();
		StringBuilder ipsb2 = new StringBuilder();
		for(int i = 0;i < 4; i++){
			String temp = Integer.toBinaryString(mask[i]);
			if(temp.length()!=8)
				for(int j = 0;j < 8-temp.length(); j++)
					masksb.append("0");
			masksb.append(temp);

			String temp2 = Integer.toBinaryString(ip[i]);
			if(temp2.length()!=8)
				for(int j = 0;j < 8-temp2.length(); j++)
					ipsb.append("0");
			ipsb.append(temp2);
			//System.out.println("ipsb: "+ipsb.toString());

			String temp3 = Integer.toBinaryString(ip2[i]);
			if(temp3.length()!=8)
				for(int j = 0;j < 8-temp3.length(); j++)
					ipsb2.append("0");
			ipsb2.append(temp3);
		}
		StringBuilder a = new StringBuilder();
		for(int i = 0;i < masksb.toString().length(); i++)
			if(masksb.charAt(i)==‘1‘&&ipsb.charAt(i)==‘1‘)
				a.append("1");
			else
				a.append("0");

		StringBuilder b = new StringBuilder();
		for(int i = 0;i < masksb.toString().length(); i++)
			if(masksb.charAt(i)==‘1‘&&ipsb2.charAt(i)==‘1‘)
				b.append("1");
			else
				b.append("0");

		if(a.toString().equals(b.toString()))
			System.out.println("0");
		else
			System.out.println("2");
	}
}

  

时间: 2024-08-07 17:00:56

判断两个IP是否属于同一子网的相关文章

五层结构 判断两个IP是否处于同一子网?

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 应用层(各种协议)                                              端口 HTTP-----超文本传输协议----- 80 FTP  -----文件传输协议    ----- 21DNS  -----域名解析协议    ----- 53Telnet---远程控制协议      ----- 23SMTP ----网络管理协议    ----- 25 传输层 基于端口进行通讯补充:端口

判断两个IP是否处于同一子网(网段)

大学的时候有上过计算机网络的课程,IP这块也有一些接触,但向来不是很好学的我,对于一些问题似是而非的态度,感觉知道,但具体的又说不上,今天就花了点时间彻底把这个问题搞清楚,写在这也算是做个记录吧!接下来我们举例说明,如何去判断A和B两个IP是否在同一网段. A IP:202.194.128.9 B IP:202.194.128.14 子网掩码:255.255.255.0 1.把A和B的地址转换为二进制的 A:1100 1010.1100 0010.1000 0000.0000 1001 B:11

华为OJ——判断两个IP是否属于同一子网

题目描述 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据. 子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为"1"和主机号部分全为"0".利用子网掩码可以判断两台主机是否中同一子网中.若两台主机的IP地址分别与它们的子网掩码相"与"后的结果相同,则说明这两台主机在同一子网中. 示例: I P 地址  192.168.0.1 子网掩码  255.255.255.0 转化为二进制进行运算: I P 地址 11010

C实现判断两个IP是否在同一个子网

在进行网络程序的时候避免不了对给定IP是否跨子网段进行判断.相关原理倒是简单, 贴出相关代码: 1 #include <stdio.h> 2 #include <math.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <unistd.h> 6   7 #define ALL_BIT 32 /* ip address have 32 bits */ 8   9 /* 10 **

判断两个IP地址是不是属于同一子网的方法

一个IP地址有三种写法: 第一种,单个IP,如192.168.55.28 第二种,IP/子网掩码,如192.168.55.28/255.255.255.0 第三种,IP/子网掩码长度,如192.168.55.28/24 对于第一种单个IP的形式,其实际相当于192.168.55.28/32或192.168.55.28/255.255.255.255. 下面说明如何判断两个IP是否属于同一子网. 这里定义两个方法,第一种方法通过IP和子网掩码计算出其网络号,第二种方法通过IP和子网掩码长度计算出其

如何判断两个IP地址是不是处于同一网段?

要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果-->网络号,如果网络号相同,就在同一子网,否则,不在同一子网. 例:假定选择了子网掩码255.255.254.0,把IP地址和子网掩码转换为二进制,分别将上述两个IP地址分别与掩码做与运算,如下所示: 211.95.165.24 11010011 01011111 10100101 00011000 255.255.254.0 11111111 11111111 111111110 00000000 与的

【华为OJ】【075-判断两个IP是否属于同一子网】

[华为OJ][算法总篇章] [华为OJ][075-判断两个IP是否属于同一子网] [工程下载] 题目描述 子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据. 子网掩码与IP地址结构相同,是32位二进制数,其中网络号部分全为"1"和主机号部分全为"0".利用子网掩码可以判断 两台主机是否中同一子网中.若两台主机的IP地址分别与它们的子网掩码相"与"后的结果相同,则说明这两台主机在同一子网中. 示例: IP地址 192.168.0.

如何判断两个IP是否在同一网段

下来举例说明,如何去判断A和B两个IP是否在同一网段. A IP:202.194.128.9 B IP:202.194.128.14 子网掩码:255.255.255.0 1.把A和B的地址转换为二进制的 A:1100 1010.1100 0010.1000 0000.0000 1001 B:1100 1010.1100 0010.1000 0000.0000 1101 掩码 :1111 1111.1111 1111. 1111 1111 .0000 0000 2.要判断两个IP是否在同一网段,

如何判断两个IP是不是在同一个网段内

和子网掩码转2进制相与 后,得到网络地址,网络地址一样则在一个子网. 子网掩码是一个32位地址,子网掩码的作用是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上.一般的IP地址设置如下: 而怎么求网络标识和主机标识呢?网络标识的求法如下:将子网掩码的二进制与IP地址的二进制相"与".具体如下 主机标识的求法:将子网掩码的二进制值取反后,再与IP地址进行与(AND)运算,具体如下: 要判断两个IP地址是不是在同一个网段,就是比较网络标识(网络