版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
源代码说明:源文件语言:C++文件数:1源文件名:ipTest.cpp#include<iostream>#include<stdlib.h>#include<stdio.h>#include<string.h>#include<math.h>#include<ctype.h>usingnamespacestd;//ipTest类定义classipTest{charip[15];//用于存放ip地址charip_Temp[15];//用于存放ip地址charsubnet_mask[18];//用于存放subnet_mask地址charsubnet[18];//用于存放subnet地址charsubnet_Temp[18];//用于存放subnet地址intmask;//用于存放mask(1的个数)boolmaskIsValid;//用于判断的个数是否合适,或是否与subnet匹配public:ipTest(char*,char*);//自定义初始化类函数~ipTest(){};//析构函数boolipIsValid(char*);//判断ip是否合法boolsubnetIsValid(char*);//判断子网号subnet是否合法boolNoIllegalChar(char*);//ip,subnet地址中非法字符的判断boolmaskIsMatSubnet(int,char*);//判断mask与subnet是否匹配voidAllJudgment();//判断mask,subnet,ip的合法性问题voidprint();//判断ip是否为子网成员,并输出判断结果voidsplit(char*,int*);//把单个字符地址转换为十进制数值型地址(含四段)inttoBinary(inta);//十进制int型数据转换为二进制int型数据char*toString(int*a);//把二进制int型数据转换为一个整体的二进制字符型数据};//main主函数intmain(intargc,char*argv[])//自动读取数据{//cout<<"目录地址:"<<argv[0]<<endl;//argv[0]表示ipTest.exe的保存目录地址cout<<"subnet_mask:"<<argv[1]<<endl;//argv[1]表示第二个参数,即subnet/maskcout<<"ip地址:"<<argv[2]<<endl<<endl;//argv[2]表示第三个参数,即ip//判断段数是否输入合法if(argc!=3)//argc表示输入的参数个数,无参数输入时,其值为,因为默认argv[0]总是有的{cout<<"输入非法!";return0;}else{//先简单判断subnet/mask的长度if(strlen(argv[1])>18){cout<<"subnet/mask输入非法!";system("pause");return0;}//先简单判断ip的长度if(strlen(argv[2])>15){cout<<"ip输入非法!";system("pause");return0;}}ipTesttest(argv[1],argv[2]);//实例化类,传入两个参数test.AllJudgment();//调用函数,判断mask,subnet,ip的合法性问题system("pause");//系统暂停return0;}//构造函数ipTest::ipTest(char*subnet_mask,char*ip){maskIsValid=true;//设置maskIsValid默认为合法chartemp[2];//定义变量inti,len;len=strlen(subnet_mask);/*******************从subnet/mask中分离出subnet地址***************/for(i=0;i<len&&subnet_mask[i]!='/';i++){this->subnet[i]=subnet_mask[i];this->subnet_Temp[i]=subnet_mask[i];}subnet_Temp[i]='\0';subnet[i]='\0';/**************************判断mask是否为数值************************/if((len-(i+1)<3&&len-(i+1)>0))//判断mask是否为一/二位字节{if(len-(i+1)==1)//表明mask是一位{temp[0]=subnet_mask[i+1];//判断字符是否为数值型字符if(!isdigit(temp[0]))//isdigit()为库函数,可以调用{cout<<"mask中含有非数字的非法字符,error!"<<endl;maskIsValid=false;//mask不是数值,则设置为false}}elseif((len-3)==i)//表明mask是二位{temp[0]=subnet_mask[i+1];temp[1]=subnet_mask[i+2];if(!(isdigit(temp[0])&&isdigit(temp[1]))){cout<<"mask中含有非数字的非法字符,error!"<<endl;maskIsValid=false;}}mask=atoi(temp);//自动把数字字符转换为对应的十进制数值的函数if(mask<0||mask>32)maskIsValid=false;}else//表明mask为空或字节超出范围{cout<<"mask为空或超出范围,error!"<<endl;maskIsValid=false;//若mask是三位数,则表明mask输入非法(其实为~32)}/********************************************************************/strcpy(this->subnet_mask,subnet_mask);//给subnet_mask赋值strcpy(this->ip,ip);//给ip赋值strcpy(this->ip_Temp,ip);//给ip_temp赋值}//判断mask,subnet,ip的合法性问题voidipTest::AllJudgment(){//设置标志subnet地址是否合法的bool型变量,并调用subnetIsValid函数判断boolsubnetIsV=subnetIsValid(subnet_Temp);//设置标记ip地址是否合法的bool型变量,并调用ipIsValid函数判断boolipIsV=ipIsValid(ip_Temp);//设置标记mask与subnet地址是否匹配的bool型变量,并调用maskIsMatSubnet函数判断boolmaskIsMatSub=maskIsMatSubnet(mask,subnet_Temp);cout<<endl;/************************判断返回的值是否为真******************/if(!maskIsValid)//表示返回的maskIsValid是false{cout<<"mask输入非法!(mask为整数并在-32范围内)"<<endl;}else{cout<<"mask合法!"<<endl;}if(!maskIsMatSub){//表示返回的maskIsMatSub是falsecout<<"mask与subnet不匹配,error!"<<endl;}else{cout<<"mask与subnet匹配!"<<endl;}if(!subnetIsV){//表示返回的subnetIsV是falsecout<<"subnet地址非法!"<<endl;}else{cout<<"subnet地址合法!"<<endl;}if(!ipIsV){//表示返回的ipIsV是falsecout<<"ip地址非法!"<<endl;}else{cout<<"ip地址合法!"<<endl;}//都合法if(maskIsValid&&maskIsMatSub&&subnetIsV&&ipIsV){print();}}//判断mask与subnet是否匹配boolipTest::maskIsMatSubnet(intmask,char*subnet_Temp){intnbsubnet[4];//用于放十进制的各段地址//调用把单个字符地址转换为十进制数值型地址(含四段)的函数,实现转换split(subnet_Temp,nbsubnet);//subnet是A类地址if(nbsubnet[0]>0&&nbsubnet[0]<127&&mask<8){//mask的值小于cout<<"mask与subnet不匹配,error!"<<endl;returnfalse;}//subnet是B类地址if(nbsubnet[0]>=128&&nbsubnet[0]<=191&&mask<16){//mask的值小于cout<<"mask与subnet不匹配,error!"<<endl;returnfalse;}//subnet是C类地址if(nbsubnet[0]>=192&&nbsubnet[0]<=223&&mask<24){//mask的值小于cout<<"mask与subnet不匹配,error!"<<endl;returnfalse;}//mask与subnet地址匹配returntrue;}//把单个字符地址转换为十进制数值型地址(含四段)voidipTest::split(char*chaddr,int*addr){charch[]=".";char*token,*dot[4];intiplen=0;token=strtok(chaddr,ch);while(token!=NULL){dot[iplen]=token;addr[iplen]=atoi(dot[iplen]);//atoi()函数把字符数值转换为int型数值iplen++;token=strtok(NULL,ch);}}//ip,subnet地址中非法字符的判断boolipTest::NoIllegalChar(char*ch){inti,len=strlen(ch);for(i=0;i<len;i++){if(ch[i]-'0'>9||ch[i]-'0'<0){returnfalse;}}returntrue;}//判断ip是否合法boolipTest::ipIsValid(char*ip){/******************把地址分为四段,保存在dot[]中************/charch[]=".";charip_one[18];strcpy(ip_one,ip);char*token,*dot[4];intiplen=0;//库函数strtok(),以ch[]为界限来分段token=strtok(ip_one,ch);while(token!=NULL){dot[iplen]=token;iplen++;token=strtok(NULL,ch);//此时,第一个参数必须换为NULL}/*****************判断地址中的段数***************************/if(iplen!=4){cout<<"地址"<<ip<<"的段数不是,error!"<<endl;returnfalse;}/***************判断地址中的'.'是否正确**********************/intj,t=0;for(j=0;j<=strlen(ip);j++){if(ip[j]=='.'){t++;}}if(t!=3){cout<<"地址"<<ip<<"中的'.'不是,error!"<<endl;returnfalse;}/************************判断地址是否含有非法字符,每段地址数值溢出**********************/inti;for(i=0;i<iplen;i++){if(!NoIllegalChar(dot[i])||atoi(dot[i])>255){if(!NoIllegalChar(dot[i]))//判断含有非法字符cout<<"地址"<<ip<<"中含有非数字的非法字符,error!"<<endl;if(atoi(dot[i])>255)//判断数值溢出cout<<"地址"<<ip<<"中含有不在-255间的数字,error!"<<endl;returnfalse;}}/*****************判断全或全的情况**************************/intflag=1;//首先设置为非法,即全for(i=0;i<iplen;i++){if(atoi(dot[i])!=0){//含有非的字段flag=0;}}if(flag==1){cout<<"地址"<<ip<<"全为全,error!"<<endl;returnfalse;}flag=1;//首先设置为非法,即全for(i=0;i<iplen;i++){if(atoi(dot[i])!=255){flag=0; }}if(flag==1){cout<<"地址"<<ip<<"全为全,error!"<<endl;returnfalse;}/**************以下判断ip地址主机号**********************/intj1=0,j2;//if(ip==ip_Temp){//首先判断ip是哪类地址if(atoi(dot[0])>0&&atoi(dot[0])<127)//A类ip地址{j1=1;//直接从开始}if(atoi(dot[0])==127)//为的特殊号{cout<<"ip地址"<<ip<<"网络号为!,error!"<<endl;returnfalse;}if(atoi(dot[0])>=128&&atoi(dot[0])<=191)//B类ip地址{j1=2;}if(atoi(dot[0])>=192&&atoi(dot[0])<=223)//C类ip地址{j1=3;}if(atoi(dot[0])>223&&atoi(dot[0])<255){cout<<"请重新输入ip地址"<<ip<<",仅限于A,B和C类ip地址,error!"<<endl;returnfalse;}/*if(atoi(dot[0])==255){cout<<"ip地址"<<ip<<"网络号全为,error!"<<endl;returnfalse;}*/j2=j1;//j1用于判断全情况,j1用于判断全情况的起始下标intflag=1;//首先设置为非法,即主机号全for(i=j1;i<iplen;i++){if(atoi(dot[i])!=0){flag=0;}}if(flag==1){cout<<"ip地址"<<ip<<"的主机号全,error!"<<endl;returnfalse;}flag=1;//首先设置为非法,即全for(i=j2;i<iplen;i++){if(atoi(dot[i])!=255){flag=0;}}if(flag==1){cout<<"ip地址"<<ip<<"的主机号全,error!"<<endl;returnfalse;}}returntrue;}//判断子网号subnet是否合法boolipTest::subnetIsValid(char*subnet){if(!ipIsValid(subnet))//调用判断Ip的函数ipIsValid()进行判断{returnfalse;}returntrue;}//判断ip是否为子网成员,并输出判断结果voidipTest::print(){charsubnet_one[15],ip_one[15];intnbip[4],nbsubnet[4],i;strcpy(subnet_one,subnet);//把subnet地址复制给subnet_onestrcpy(ip_one,ip);//把ipt地址复制给ip_one//split()函数把字符型的地址转换为四段int型的地址split(subnet_one,nbsubnet);//用subnet_one而非subnet是为了保护subnet地址不被破坏split(ip_one,nbip);for(i=0;i<4;i++){nbip[i]=toBinary(nbip[i]);//将分离出来的十进制转换为二进制nbsubnet[i]=toBinary(nbsubnet[i]);}char*cbip=newchar[33];char*cbsubnet=newchar[33];cbip=toString(nbip);//将二进制数组转换为位的二进制字符指针cbsubnet=toString(nbsubnet);for(i=0;i<mask;i++){if(cbip[i]!=cbsubnet[i]){cout<<endl<<"IP地址:"<<ip<<"不属于"<<subnet<<"这一子网"<<endl;//system("pause");return;}}cout<<endl<<"IP地址:"<<ip<<"属于"<<subnet<<"这一子网"<<endl;//system("pause");}//十进制int型数据转换为二进制int型数据intipTest::toBinary(inta){//将十进制数转换为二进制数if(a/2==0)returna%2;returna%2+toBinary(a/2)*10;//递归调用}//把二进制int型数据转换为一个整体的二进制字符型数据char*ipTest::toString(i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 低温仓储物流信息化管理考核试卷
- 污水处理中的微型湿地净化技术考核试卷
- 智能医疗的投资机会与风险管理考核试卷
- 宠物健康评估和咨询考核试卷
- 学校反电信诈骗实施方案
- 2024-2030年中国盆花行业运营模式及未来发展策略分析报告版
- 2024-2030年中国白云石露天开采产业未来发展趋势及投资策略分析报告
- 2024-2030年中国电缆电商行业发展现状投资模式分析报告
- 2024-2030年中国电动三轮车需求状况与销售产值预测报告
- 2024-2030年中国电光源行业竞争现状分析及发展趋势研究报告
- 各国钢材牌号对照大全
- 标准化班组建设演示幻灯片
- 华为HCIP H31-341 V2.5传输认证考试题库大全-上(单选、多选题汇总)
- 小学生数学思维品质的调查研究的开题报告
- DB51T3080-2023研学旅行实践承办机构服务与管理规范
- 苏教版三年级数学上册《笔算两、三位数除以一位数》评课稿
- GB/T 7702.7-2023煤质颗粒活性炭试验方法第7部分:碘吸附值的测定
- 中国历史的教训-习骅
- 《分散系》说课课件
- 抗痉挛体位专题知识讲座
- 广东省3证书高职高考语文试卷和答案
评论
0/150
提交评论