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;isubnet[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