/* * By: John Stile * Purpose: Determine broadcast address from the ip and subnet mask */ #include #include #include int main() { /* * I get the addresses as strings from config file */ char * ip = "192.168.60.116"; char * mask = "255.255.255.0"; /* * Convert to sockaddr_in structs */ struct sockaddr_in addr_ip; struct sockaddr_in addr_netmask; struct sockaddr_in addr_broadcast; if ( 1 != (inet_pton( AF_INET, ip, &addr_ip.sin_addr)) ) return 1; if ( 1 != (inet_pton( AF_INET, mask, &addr_netmask.sin_addr)) ) return 1; /* * initially set broadcast to subnet mask */ if ( 1 != (inet_pton( AF_INET, mask, &addr_broadcast.sin_addr)) ) return 1; printf("0x%08x\n", addr_broadcast.sin_addr); /* * xor to flip bits */ addr_broadcast.sin_addr.s_addr ^= 0xffffffff; printf("0x%08x\n", addr_broadcast.sin_addr); /* * Finall merge that wiht the IP */ addr_broadcast.sin_addr.s_addr |= addr_ip.sin_addr.s_addr; printf("0x%08x\n", addr_broadcast.sin_addr); printf("0x%08x\n", addr_ip.sin_addr); printf("0x%08x\n", addr_netmask.sin_addr); printf("0x%08x\n", addr_broadcast.sin_addr); printf("IP:%s\n", inet_ntoa(addr_ip.sin_addr)); printf("MASK:%s\n", inet_ntoa(addr_netmask.sin_addr)); printf("BROADCAST:%s\n", inet_ntoa(addr_broadcast.sin_addr)); return 0; }