1. Write a C program that takes a classless IP address as input and displays it in binary, the number of network and host address depending on number represented after the backslash
Classless is called Classless Inter-Domain Routing. It was introduced in 1993 to replace classfull addressing and it allows the user to use Variable Length Subnet Makss(VLSM). Class-less subnet masks are denoted by /X. X is the subnet mask. For example 192.168.0.1/24.
[Note: Input must be like this XXX.XXX.XXX.XXX/XX
Example: 192.168.0.1/24]
Network Address: (224-2)
Host Address: (28-2)
Enter IPv4: 192.168.0.1/24 IP in binary: 11000000.10101000.00000000.00000001 Network address: (2^24)-2 = 16777214 Host Address: (2^8)-2 = 254 Process returned 29 (0x1D) execution time : 19.943 s Press any key to continue.
#include<stdio.h>
#include<math.h>
void decToBin(int number)
{
int i, bin[8];
for(i = 0; number > 0; i++)
{
bin[i] = number % 2;
number = number/2;
}
for(i = i-1; i >= 0; i--)
{
number = (10 * number) + bin[i];
}
printf("%0.8d", number);
}
void main()
{
int i, count = 0, ipv4Len, number = 0, digit, netMask = 0, inputLen;
long netAddress, hostAddress;
char ip[30];
printf("Enter IPv4: ");
scanf("%s", ip);
for(i = 0; ip[i] != 47; i++);
ipv4Len = i;
for(i = ipv4Len+1; ip[i] != '\0'; i++);
inputLen = i;
printf("IP in binary: ");
for(i = 0; i < ipv4Len; i++)
{
if(ip[i] == '.')
{
decToBin(number);
number = 0;
printf(".");
}
else
{
digit = ip[i] - '0';
number = (10 * number) + digit;
}
}
decToBin(number);
for(i = ipv4Len+1; i < inputLen; i++)
{
//ch = '8' = 56, '0' = 48, digit = ch - '0'
digit = ip[i] - '0';
netMask = (10 * netMask) + digit;
}
netAddress = pow(2, netMask);
hostAddress = pow(2, (32-netMask));
printf("\nNetwork address: (2^%d)-2 = %ld\n", netMask, (netAddress-2));
printf("Host Address: (2^%d)-2 = %ld\n\n", (32-netMask), (hostAddress-2));
}
Enter IPv4: 103.237.76.98/16 IP in binary: 01100111.11101101.01001100.01100010 Network address: (2^16)-2 = 65534 Host Address: (2^16)-2 = 65534 Process returned 32 (0x20) execution time : 43.430 s Press any key to continue.