C通过网关IP和子网掩码计算子网所有的IP
2024-03-19 本文已影响0人
嘻嘻哈哈哎呀呀
代码如下 :
// 将整数转换为IP地址
void int_to_ip(unsigned int ip, char *buffer) {
sprintf(buffer, "%u.%u.%u.%u", (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF);
}
//将IP转换为整数
unsigned int ip_to_int(char *ip) {
unsigned int a, b, c, d;
sscanf(ip, "%u.%u.%u.%u", &a, &b, &c, &d);
return (a << 24) + (b << 16) + (c << 8) + d;
}
// 计算子网内所有IP地址
void calculate_ips(char *gateway, char *netmask) {
unsigned int base_ip = ip_to_int(gateway); // 网关IP地址转换为整数
unsigned int net_ip = base_ip & ip_to_int(netmask); // 子网网络地址转换为整数
unsigned int broadcast_ip = net_ip | ~(ip_to_int(netmask)); // 子网广播地址转换为整数
printf("%ul,%ul,%ul\n", base_ip,net_ip,broadcast_ip);
char buffer[16];
for (unsigned int i = net_ip; i <= broadcast_ip; i++) { // 遍历子网内所有IP地址
int_to_ip(i, buffer); // 将整数转换为IP地址并存储到缓冲区中
printf("%s\n", buffer); // 输出IP地址
}
}
int main2() {
char gateway[] = "172.16.30.1"; // 网关IP地址
char netmask[] = "255.255.255.0"; // 子网掩码
calculate_ips(gateway, netmask); // 计算子网内所有IP地址并输出结果到屏幕上,测试用,可注释掉
return 0;
}