Source Code : Class_Less.C

Class_Less.C

#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <string.h>

#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 * findmask(int m)

{

int i,j,sum=0,maskbits[4]={0};

char *mask,output[MAX];

mask=(char*)malloc(MAX);

for(j=0;j<4;j++)

{

if(m<8)

{

for(i=0;i<m;i++)

sum=sum+pow(2,(7-i));

maskbits[j]=sum;

break;

}

else

{

m=m-8;

maskbits[j]=255;

}

}

for(i=0;i<4;i++)

{

sprintf(output,"%d",maskbits[i]);

if(i!=3)

{

strcat(output,".");

}

strcat(mask,output);

}

return mask;

}

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;

int

result=0,n,m;

char *mask=NULL,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;

}

printf("\n Input the mask bit numbers:");

scanf("%d",&m);

if(m<0 || m>32)

{

printf("Input mask bit value less than 32 : ");

return 0;

}

mask=findmask(m);

printf("\n Mask :%s",findmask(m));

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

return 0;

}