给我一个简单的c语言程序代码判断任意两台计算机的ip地址是否属于同一子网络
时间: 2024-03-27 12:39:09 浏览: 15
好的,以下是一个简单的 C 语言程序,可以判断两个 IP 地址是否属于同一子网络:
```c
#include <stdio.h>
#include <string.h>
int main() {
char ip1[16], ip2[16], subnet[16];
int mask;
// 获取两个IP地址和子网掩码
printf("请输入第一个IP地址:");
scanf("%s", ip1);
printf("请输入第二个IP地址:");
scanf("%s", ip2);
printf("请输入子网掩码:");
scanf("%s", subnet);
// 将IP地址和子网掩码转换为二进制数
unsigned long ip1_bin = 0, ip2_bin = 0, subnet_bin = 0;
sscanf(ip1, "%lu.%lu.%lu.%lu", &ip1_bin, &ip1_bin, &ip1_bin, &ip1_bin);
sscanf(ip2, "%lu.%lu.%lu.%lu", &ip2_bin, &ip2_bin, &ip2_bin, &ip2_bin);
sscanf(subnet, "%lu.%lu.%lu.%lu", &subnet_bin, &subnet_bin, &subnet_bin, &subnet_bin);
// 计算子网掩码的前缀位数
mask = 0;
unsigned long temp = subnet_bin;
while (temp != 0) {
mask++;
temp = temp << 1;
}
// 判断两个IP地址是否属于同一子网
unsigned long net1 = ip1_bin & subnet_bin;
unsigned long net2 = ip2_bin & subnet_bin;
if (net1 == net2) {
printf("%s 和 %s 属于同一子网\n", ip1, ip2);
} else {
printf("%s 和 %s 不属于同一子网\n", ip1, ip2);
}
return 0;
}
```
这个程序首先会提示用户输入两个IP地址和子网掩码,然后将它们转换为二进制数。接着,程序会计算子网掩码的前缀位数,并根据前缀位数判断两个IP地址是否属于同一子网。最后,程序会输出判断结果。