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;
}
Copyright © 2011 - All Rights Reserved - Softron.in
Template by Softron Technology