Source Code : ClassFull.C

ClassFull.C

#include

#include

#include

#include

#include

#include

#include

#include

#define MAX 256

int count(char str[],char c)

{

int i,num = 0; // the number of times c is in str

for(i = 0; i < strlen(str); ++i)

{

if( str[i] == c )

num++;

}

return num;

}

char *find_network_address(struct in_addr addr,char *m)

{

struct in_addr mask,netw_addr;

char *buf;

inet_aton(m,&mask); //convert dotted decimal address into binary

netw_addr.s_addr=addr.s_addr & mask.s_addr;

buf=(char*)inet_ntoa(netw_addr); //convert binary address into dotted decimal address

return buf;

}

int main()

{

struct in_addr addr,mask,netw_addr;

int

result=0,n;

char *buf,IP[MAX];

printf("\n Input an IP address:");

fgets(IP,MAX,stdin);

if(count(IP,'.') != 3)

{

printf("\n Invalid address\n");

return 0;

}

n=inet_aton(IP, &addr);

//convert dotted decimal address into binary

if(n==0)

{

printf("\n Invalid address\n");

return 0;

}

result=addr.s_addr & 255;

if(result >=0 && result <=127)

{

printf("\n Class A address\n");

printf("\n Subnet mask 255.0.0.0");

printf("\n Network address:%s\n",find_network_address(addr,"255.0.0.0"));

}

else if (result >=128 && result <= 191)

{

printf("\n Class B address\n");

printf("\n Subnet mask 255.255.0.0");

printf("\n Network address:%s\n",find_network_address(addr,"255.255.0.0"));

}

else if (result >=192 && result <= 223)

{

printf("\n Class C address\n");

printf("\n Subnet mask 255.255.255.0");

printf("\n Network address:%s\n",find_network_address(addr,"255.255.255.0"));

}

else if (result >=224 && result <= 239)

{

printf("\n Class D address");

printf("\n Used only for multicast addressing\n");

}

else if (result >=240 && result <= 255)

{

printf("\n Class E address\n");

printf("\n Reserved for Future use\n");

}

else

printf("\n Invalid IP Address\n");

}