www.pudn.com > ZARN.rar > ip_test.cpp
#include#include #include #include #include #include //类结构 class ipTest{ char ip[15]; char subnetplusMask[18]; char subnet[18]; char TempIp[15]; char TempSub[18]; int mask; bool maskIsValid; public: ipTest(char *,char *); ~ipTest(){}; bool NoIllegalChar(char *);//非法字符判断 bool ipIsValid(char*); //判断IP地址是否合法 bool subnetIsValid(char*);//判断子网号是否合法 void belong(); print(); }; //主函数 void main(int argc,char* argv[]){ if(argc!=3){ cout<<"error"< 18){ cout<<"subnet/mask is too long"; return; } if(strlen(argv[2])>15){ cout<<"ip is toolong"; return; } ipTest test( argv[1],argv[2]);//实例化ipTest类 test.print();//完成相应判别并输入结果 } } //构造函数 ipTest::ipTest( char* subnetPlusMask, char *ip){ maskIsValid=true; char temp[2]; int smLen=strlen(subnetPlusMask); for(int i=0;i subnet[i]=subnetPlusMask[i]; this->TempSub[i]=subnetPlusMask[i]; } subnet[i]='\0'; TempSub[i]='\0'; if(i<=smLen-2){ if(i==smLen-2){ temp[0]=subnetPlusMask[i+1]; if(!isdigit(temp[0])) maskIsValid=false; } else if(i==smLen-3){ temp[0]=subnetPlusMask[i+1]; temp[1]=subnetPlusMask[i+2]; if(!(isdigit(temp[0])&&isdigit(temp[1]))) maskIsValid=false; } mask=atoi(temp); if(mask<0||mask>32) maskIsValid=false; } else //用十进制数表示的掩码中1的个数只能是一位数或者两位数 maskIsValid=false; strcpy(this->subnetplusMask,subnetPlusMask);//给subnetPlusMask赋值 strcpy(this->ip ,ip); strcpy(this->TempIp,ip); } //调试判别函数,并输入结果 ipTest::print(){ bool subIsV=subnetIsValid(TempSub); bool ipISv=ipIsValid(TempIp); if(!subIsV) cout<<"SUBNET IS INVALID !"< 255) return false; } return true ; } //判断子网号是否合法 bool ipTest::subnetIsValid(char *subnet){ if(!ipIsValid(subnet)) return false; return true; } //判断IP是否为子网哪成员,是否子网号与掩码匹配 void ipTest::belong(){ int subLen=strlen(subnet); int iplen=strlen(ip); unsigned int iIPA,iSubA,iMask; unsigned char subA[4],ipA[4]; char temp[3]; int i,j,t =0; for(i=0,j=0;i