Files
2026-05-07 17:53:17 +02:00

40 lines
1.2 KiB
C

#include <stdio.h>
#include <arpa/inet.h>
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;
}