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;  
}
上一篇下一篇

猜你喜欢

热点阅读