IP地址的合法和子网判断终极版(带ABCDE类网分类、带指导学渣如何使用代码).docx_第1页
IP地址的合法和子网判断终极版(带ABCDE类网分类、带指导学渣如何使用代码).docx_第2页
IP地址的合法和子网判断终极版(带ABCDE类网分类、带指导学渣如何使用代码).docx_第3页
IP地址的合法和子网判断终极版(带ABCDE类网分类、带指导学渣如何使用代码).docx_第4页
IP地址的合法和子网判断终极版(带ABCDE类网分类、带指导学渣如何使用代码).docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

IP地址的合法性和子网判断终极版(带ABCDE类网分类、带指导学渣如何使用代码)#include #include #include #include #include #include /类结构 int flag;class ipTest char ip15; /定义ip数组,存放ip地址 char subnetPlusMask18; /定义subnetPlusMask数组,存放子网号和子网掩码中1的个数 char subnet18; /定义subnet数组,存放子网号 char TempIp15; /定义TempIp数组,存放临时的ip地址 char TempSub18; /定义TempSub数组,存放临时的子网号 int mask; /定义整型mask,存放子网掩码中1的个数 bool maskIsValid;/定义布尔值maskIsValid,存放判断mask真值的变量 public: ipTest(char *,char *); /定义ipTest函数 ipTest(); bool NoIllegalChar(char *); /非法字符的判断 bool ipIsValid(char *); /判断IP地址是否合法 bool subnetIsValid(char *); /判断子网号是否合法 void belong(); /判断IP是否为子网成员 char TellIpType(int num) ;print();/定义输出函数print ; /主函数 void main(int argc,char *argv) flag=1;if(argc != 3) /判断参数格式是否正确 cout 命令格式错误! endl 正确的命令格式应该是:程序名 子网号/掩码 ip地址 18) /先判断最简单的错误,子网号及子网掩码长度和是否超出 cout 15) /ip地址长度是否超出 cout ip 地址长度过长!; return; ipTest test(argv1,argv2); /实例化ipTest类 test.print(); /完成相应判别并输出结果 /构造函数 ipTest:ipTest(char* subnetPlusMask,char *ip) maskIsValid = true; char temp2; /把/前的字符复制到subnet字符数组中 int smLen = strlen(subnetPlusMask); / 定义smLen为subnetPlusMask的长度 for(int i = 0;i subneti = subnetPlusMaski; /对subnet数组赋值,值为subnetPlusMask中的数值 this-TempSubi = subnetPlusMaski; /对TempSub数组赋值,值为subnetPlusMask中的数值 subneti = 0;/给数组加上结束符 TempSubi = 0; /给数组加上结束符 if(i = smLen-3) /初始化mask和maskIsValid if(i = smLen-2) temp0 = subnetPlusMaski+1; if(!isdigit(temp0) /判断temp中的值是否为字符 maskIsValid = false; else if(i = smLen-3) temp0 = subnetPlusMaski+1; temp1 = subnetPlusMask1+2; if(!(isdigit(temp0)&isdigit(temp1) /判断temp中的值是否为字符 maskIsValid = false; mask = atoi(temp); /将temp中的字符数值化 if(mask 32) /判断mask值是否超出范围 maskIsValid = false; else /用十进制数表示的掩码中1的个数只能是一位数或者两位数 maskIsValid = false; strcpy(this-subnetPlusMask,subnetPlusMask); /给subnetPlusMask赋值 strcpy(this-ip,ip); /给IP赋值 strcpy(this-TempIp,ip); /调用判别函数,并输出结果 ipTest:print() bool subIsV = subnetIsValid(TempSub); bool ipIsV = ipIsValid(TempIp); if(!subIsV) /subnet非法 cout 子网号无效! endl; else cout 有效子网号为: subnet endl; if(!maskIsValid) /mask非法 cout 掩码无效! endl; else cout 有效掩码为: mask endl; if(!ipIsV) /ip非法 cout ip 地址无效! endl; else cout 有效ip地址为: ip endl; /判断ip是否belong subnet if(subIsV & ipIsV & maskIsValid) belong(); char ipTest:TellIpType(int num) if(num127) return A; else if(num192) return B; else if(num224) return C; else if(num240) return D; else return E;/子网数,判断输入是否含有非数字字符 bool ipTest:NoIllegalChar(char *ch) unsigned int i,k=0; for(i=0;i strlen(ch);i+) if(isdigit(*(ch+i)=0) /判断每一位是否为数字字符 return false; return true; /若不含有非法数字字符则返回true /判别IP地址是否合法 bool ipTest:ipIsValid(char * tip) char ch=.; /分隔符 char *token,*dot4; int iplen = 0; int i=0,t=0;token = strtok(tip,ch); /以.标志将IP字符串按节分开 while(token!=NULL) /循环进行,直到结束 dotiplen=token; /将分开的每段赋值给dot iplen+; token = strtok(NULL,ch); if(iplen != 4) /段数不对 return false; for(i = 0; i 255) /有非法字符或某段值非法 return false; if(flag)int ipl=strlen(TempIp);for(i=0;iipl;i+)if(TempIpi=.)break;t=t*10+TempIpi-0;cout ip 是 TellIpType(t)类网络endl;flag=0;return true; /判断子网号是否合法 bool ipTest:subnetIsValid(char* subnet) if(!ipIsValid(subnet) /调用判别IP地址合法性的函数 return false; return true; /判断IP是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全0全1问题 void ipTest:belong() int subLen = strlen(subnet); int i,j,t = 0; int ipLen = strlen(ip); unsigned int iIPA,iSubA,iMask; unsigned char subA4,ipA4; char temp3; for (i = 0, j= 0;i subLen;i+) /不用再检错 if(subneti !=.) tempj+=subneti; /temp数组中放.间的串 else subA3-t = atoi(temp); /subA数组中放.间的数据 j=0; t+; temp0=temp1=temp2=0; subA0=atoi(temp); temp0=temp1=temp2=0; iSubA=*(unsigned int *)subA; /iSubA中放subnet中.除外的串对应的数 for(i=0,j=0,t=0;i ipLen;i+) /不用再检错 if(ipi!=.) tempj+=ipi; else ipA3-t=atoi(temp); j=0; t+; temp0=temp1=temp2=0; ipA0=atoi(temp); iIPA=*(unsigned int*)ipA; /iIPA中放IP中.除外的串对应的数 iMask = 0xffffffff; iMask =(32-mask); /获得掩码 if(iSubA | iMask)!= iMask) /说明sub与mask不匹配 cout 错误,子网号与掩码不匹配! endl; return; if(iSubAiMask)=0) /说明子网号全1 cout 错误,子网号全1! endl; return; if(iSubA&iMask)=0) /说明子网号全0 cout 错误,子网号全0! endl; return; if(iSubA)=(iIPA&iMask) /IP和掩码与,结果和子网号比较 if(iIPA|iMask)=iMask) /说明主机号全0 cout 错误,主机号全0! endl; return; if(iIPA|iMask)=0xffffffff) /说明主机号全1 cout 错误,主机号全1! e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论