判断两个ip地址是否属于同一子网

2023-05-16

#include <stdio.h>
#include <string.h>
#include <stdlib.h>   

/*
功能: 判断两台计算机IP地址是同一子网络。
原型:
    int checkNetSegment( char * pcSubNetworkMask,char * pcIp1, char * pcIp2)
	
输入参数:
    char * pcIP1: 计算机1的IP地址,格式:“192.168.0.254”;
    char * pcIP2: 计算机2的IP地址,格式:“192.168.0.1”;
    char * pcSubNetworkMask: 子网掩码,格式:“255.255.255.0”;

返回值:
    0:IP1与IP2不属于同一子网络;
    1:IP1与IP2属于同一子网络;
*/

int checkNetSegment( char * pcSubNetworkMask,char * pcIp1, char * pcIp2)
{
   int flag=1;
if(!pcIp1||!pcIp2||!pcSubNetworkMask)// 判断传入ip地址是否为空
 return 0;

int ip1[4]={0};// 用于存放ip地址的 四个位
int ip2[4]={0};
int ip3[4]={0};// 用于存放子网掩码的 四个位

sscanf_s(pcIp1,"%d.%d.%d.%d",&ip1[0],&ip1[1],&ip1[2],&ip1[3]);// 通过sscanf_s 将ip地址提取出来放到数组里
sscanf_s(pcIp2,"%d.%d.%d.%d",&ip2[0],&ip2[1],&ip2[2],&ip2[3]);
sscanf_s(pcSubNetworkMask,"%d.%d.%d.%d",&ip3[0],&ip3[1],&ip3[2],&ip3[3]);

for(int i=0;i<4;i++)//判断ip地址是否非法
if(ip1[i]<0||ip1[i]>255||ip2[i]<0||ip2[i]>255||ip3[i]<0||ip3[i]>255)
return 0;

for(int i=0;i<4;i++)
{
if((ip1[i]&ip3[i])==(ip2[i]&ip3[i]))
	continue;
else
{
	flag=0;
	break;
}
}
 return flag;
}
int main()
{
	char ip1[15];//数组长度要够长3*4+3=15以上
	char ip2[15];
	char mask[15];
	int a=0;
	printf("first:");
	scanf("%s",ip1);
	printf("second:");
	scanf("%s",ip2);
	printf("mask:");
	scanf("%s",mask);
	a=checkNetSegment(mask,ip1,ip2);
	printf("a = %d\n",a);
	system("pause");
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐