#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(使用前将#替换为@)