23,114
社区成员
发帖
与我相关
我的任务
分享
char mask_ok[]="255.255.255.0"
char mask_err[]="255.0.255.0"
#include <stdlib.h>
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
int checkNetmask(const char *netmask)
{
char bigEdianBytes[4];
if(inet_pton(AF_INET,netmask,bigEdianBytes)<=0)
{
perror("inet_pton");
return -1;
}
bool hasNullBits=false;
for(int i=0;i<4;++i)
{
for(int j=0,k=(1<<7);j<7;++j,k>>=1)
{
bool isSet=k&bigEdianBytes[i];
if(isSet && hasNullBits)
{
return -1;
}
else if(!isSet)
{
hasNullBits=true;
}
}
}
return 0;
}
int main()
{
int n1=checkNetmask("255.255.255.0");
int n2=checkNetmask("0.255.0.255");
int n3=checkNetmask("130.255.255.255");
printf("%d %d %d \n",n1,n2,n3);
return 0;
}
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
unsigned int mask;
char mask_good[] = "255.255.255.0";
char mask_bad[] = "255.0.255.0";
mask = inet_addr(mask_good);
if (((~mask + 1) & ~mask) == 0 )
printf("%s\n", "good");
else
printf("%s\n", "bad");
mask = inet_addr(mask_bad);
if (((~mask + 1) & ~mask) == 0 )
printf("%s\n", "good");
else
printf("%s\n", "bad");
return 0;
}
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <strings.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
unsigned int mask;
char mask_good[] = "255.255.255.0";
char mask_bad[] = "255.0.255.255";
mask = inet_addr(mask_good);
if ((~mask) >> ffs(mask) == 0)
printf("%s\n", "good");
else
printf("%s\n", "bad");
mask = inet_addr(mask_bad);
if ((~mask) >> ffs(mask) == 0)
printf("%s\n", "good");
else
printf("%s\n", "bad");
return 0;
}