子网掩码,判断多个ip是否属于同一个子网

子网掩码计算方法 

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。

最为简单的理解就是两台计算机各自的IP地址与子网掩码进行AND运算后,如果得出的结果是相同的,则说明这两台计算机是处于同一个子网络上的,可以进行直接的通讯。就这么简单。

请看以下示例:

运算演示之一:aa 
I P 地址  192.168.0.1 
子网掩码  255.255.255.0 
AND运算

转化为二进制进行运算: 
I P 地址 11010000.10101000.00000000.00000001 
子网掩码 11111111.11111111.11111111.00000000 
AND运算

     11010000.10101000.00000000.00000000 
转化为十进制后为:

      192.168.0.0


运算演示之二: 
I P 地址  192.168.0.254 
子网掩码  255.255.255.0 
AND运算

转化为二进制进行运算: 
I P 地址 11010000.10101000.00000000.11111110 
子网掩码 11111111.11111111.11111111.00000000 
AND运算

     11010000.10101000.00000000.00000000 
转化为十进制后为:

      192.168.0.0


运算演示之三: 
I P 地址  192.168.0.4 
子网掩码  255.255.255.0 
AND运算

转化为二进制进行运算: 
I P 地址 11010000.10101000.00000000.00000100 
子网掩码 11111111.11111111.11111111.00000000 
AND运算

     11010000.10101000.00000000.00000000 
转化为十进制后为:

      192.168.0.0


通过以上对三组计算机IP地址与子网掩码的AND运算后,我们可以看到它运算结果是一样的。均为192.168.0.0

  所以计算机就会把这三台计算机视为是同一子网络。

using namespace std;
#include <string.h>
#include <iostream>
using namespace std;
#include <string>
string And(string ip1,string ip2,string dns){
	int lip1=ip1.length(),ldns=dns.length(),lip2=ip2.length();
	int ip1Arr[4]={0},ip2Arr[4]={0},dnsArr[4]={0};
	int j=0;
	for(int i=0;i<4;i++ ){
		for(j;j<lip1;j++)
		{
			
			if(ip1[j]=='.'){
				break;
			}
			ip1Arr[i]=ip1Arr[i]*10+ip1[j]-'0';
		}
		j++
	}
	j=0;
	for(int i=0;i<4;i++ ){
		for(j;j<lip2;j++){
			if(ip2[j]=='.')
				break;
			ip2Arr[i]=ip2Arr[i]*10+ip2[j]-'0';
		}
		j++
	}
	j=0;
	for(int i=0;i<4;i++ ){
		for(j;j<ldns;j++){
			if(dns[j]=='.')
				break;
			dnsArr[i]=dnsArr[i]*10+dns[j]-'0';
		}
		j++
	}
	for(int i=0;i<4;i++)
		cout<<ip1Arr[i];
	cout<<endl;
	for(int i=0;i<4;i++){
		int result1=ip1Arr[i]&dnsArr[i];
		int result2=ip2Arr[i]&dnsArr[i];
		cout<<result1<<"dd"<<result2<<endl;
		if(result1!=result2){
			return "OUTER";
			break;
		}
	}
	return "INNER";
}
int main(){
	string ip0,dns;
	cin>>ip0>>dns;
	int num;
	cin>>num;
	while(num){
		string ip1;
		cin>>ip1;
		cout<<And(ip0,ip1,dns);
		num--;
	}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值