#include #include void network4(const char* network, int prefix) { struct in_addr inaddr; // Convert from human view to network bytes if (inet_pton(AF_INET, network, &inaddr) == 0) { printf("Invalid IP address\n"); return; } // Convert from network bytes to local uint32_t ip = ntohl(inaddr.s_addr); // Calculate mask and net uint32_t mask = (prefix == 0) ? 0 : (~0U << (32 - prefix)); uint32_t net = ip & mask; uint32_t fip = net + 1; // Convert net address bytes to network order struct in_addr net_addr; net_addr.s_addr = htonl(net); // Convert mask bytes to network order struct in_addr mask_addr; mask_addr.s_addr = htonl(mask); // Convert mask bytes to network order struct in_addr fip_addr; fip_addr.s_addr = htonl(fip); printf("IP: %s/%d\n", network, prefix); printf("Netmask: %s\n", inet_ntoa(mask_addr)); printf("Network: %s\n", inet_ntoa(net_addr)); printf("First: %s\n", inet_ntoa(fip_addr)); } int main() { network4("192.168.1.154", 26); return 0; }