版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验九:IP地址的合法性及子网判断#include<iostream.h>#include<string.h>#include<stdlib.h>#include<ctype.h>//类结构classipTest{charip[15];//定义ip数组,存放ip地址charsubnetPlusMask[18];//定义subnetPlusMask数组,存放子网号和子网掩码中1的个数charsubnet[18];//定义subnet数组,存放子网号charTempIp[15];//定义TempIp数组,存放临时的ip地址charTempSub[18];//定义TempSub数组,存放临时的子网号intmask;//定义整型mask,存放子网掩码中1的个数boolmaskIsValid;//定义布尔值maskIsValid,存放判断mask真值的变量public:ipTest(char*,char*);//定义ipTest函数ipTest(){};boolNoIllegalChar(char*);//非法字符的判断boolipIsValid(char*);//判断IP地址是否合法boolsubnetIsValid(char*);//判断子网号是否合法voidbelong();//判断IP是否为子网成员print();//定义输出函数print};//主函数voidmain(intargc,char*argv[]){if(argc!=3){//判断参数格式是否正确cout<<"Pleaseinputcommand:ip_testsubnet/maskip";return;}else{if(strlen(argv[1])>18){//先判断最简单的错误,子网号及子网掩码长度和是否超出cout<<"subnet/maskistoolong";return;}if(strlen(argv[2])>15){//ip地址长度是否超出cout<<"ipAddressistoolong";return;}ipTesttest(argv[1],argv[2]);//实例化ipTest类test.print();//完成相应判别并输出结果}}//构造函数ipTest::ipTest(char*subnetPlusMask,char*ip){maskIsValid=true;chartemp[2];//把'/'前的字符复制到subnet字符数组中intsmLen=strlen(subnetPlusMask);//定义smLen为subnetPlusMask的长度for(inti=0;i<smLen&&subnetPlusMask[i]!='/';i++){this->subnet[i]=subnetPlusMask[i];//对subnet数组赋值,值为subnetPlusMask中的数值this->TempSub[i]=subnetPlusMask[i];//对TempSub数组赋值,值为subnetPlusMask中的数值}subnet[i]='\0';//给数组加上结束符TempSub[i]='\0';//给数组加上结束符if(i>=smLen-2){//初始化mask和maskIsValidif(i==smLen-2){temp[0]=subnetPlusMask[i+1];if(!isdigit(temp[0]))//判断temp中的值是否为字符maskIsValid=false;}else{if(i==smLen-3){temp[0]=subnetPlusMask[i+1];temp[1]=subnetPlusMask[1+2];if(!(isdigit(temp[0])&&isdigit(temp[1])))//判断temp中的值是否为字符maskIsValid=false;}}mask=atoi(temp);//将temp中的字符数值化if(mask<0||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(){boolsubIsV=subnetIsValid(TempSub);boolipIsV=ipIsValid(TempIp); //判断子网是否合法if(!subIsV)cout<<"subnetisinvalid!"<<endl;elsecout<<"validsubnet:"<<subnet<<endl; //判断掩码是否合法if(!maskIsValid)cout<<"maskisinvalid!"<<endl;elsecout<<"validmask:"<<mask<<endl;//判断ip地址是否合法 if(!ipIsV)cout<<"Ipaddressisinvalid!"<<endl;elsecout<<"validipaddress:"<<ip<<endl;//判断ip地址是否属于子网if(subIsV&&ipIsV&&maskIsValid)belong();}//子网数,判断输入是否含有非数字字符boolipTest::NoIllegalChar(char*ch){unsignedinti,k=0;for(i=0;i<strlen(ch);i++)if(isdigit(*(ch+i))==0)//判断每一位是否为数字字符returnfalse;returntrue;//若不含有非法数字字符则返回true}//判别IP地址是否合法boolipTest::ipIsValid(char*ip){charch[]=".";//分隔符char*token,*dot[4];intiplen=0;token=strtok(ip,ch);//以"."标志将IP字符串按节分开while(token!=NULL){//循环进行,直到结束dot[iplen]=token;//将分开的每段赋值给dotiplen++;token=strtok(NULL,ch);}//判断IP地址的段数if(iplen!=4)//段数不对returnfalse;for(inti=0;i<4;i++)if(!NoIllegalChar(dot[i])||atoi(dot[i])>255)//有非法字符或某段值非法returnfalse;returntrue;}//判断子网号是否合法boolipTest::subnetIsValid(char*subnet){if(!ipIsValid(subnet))//调用判别IP地址合法性的函数returnfalse;returntrue;}//判断IP是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全0全1问题voidipTest::belong(){intsubLen=strlen(subnet);intipLen=strlen(ip);unsignedintiIPA,iSubA,iMask;unsignedcharsubA[4],ipA[4];chartemp[3];inti,j,t=0;for(i=0,j=0;i<subLen;i++){//不用检错if(subnet[i]!='.')temp[j++]=subnet[i];//temp数组中放'.'间的串else{subA[3-t]=atoi(temp);//subA数组中放'.'间的数据j=0;t++;temp[0]=temp[1]=temp[2]='\0';}}subA[0]=atoi(temp);temp[0]=temp[1]=temp[2]='\0';iSubA=*(unsignedint*)subA;//iSubA中放subnet中'.'除外的串对应的数for(i=0,j=0,t=0;i<ipLen;i++){//不用再检错if(ip[i]!='.')temp[j++]=ip[i];else{ipA[3-t]=atoi(temp);j=0;t++;temp[0]=temp[1]=temp[2]='\0';}}ipA[0]=atoi(temp);iIPA=*(unsignedint*)ipA;//iIPA中放IP中'.'除外的串对应的数//获得掩码iMask=0xffffffff;iMask<<=(32-mask);if((iSubA|iMask)!=iMask){//说明sub与mask不匹配cout<<"subnetandmasknotmatch!";return;}if((iSubA^iMask)==0){//说明子网号全1cout<<"subnetisall1!";return;}if((iSubA&iMask)==0){//说明子网号全0cout<<"subnetisall0!";return;}if((iSubA)==(iIPA&iMask)){//IP和掩码与,结果和子网号比较if((iIPA|iMask)==iMask){//说明主机号全0cout<<"Ipaddressisall0!";return;}if((iIPA|iMask)==0xffffffff){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年量化分析师AI面试题库
- 2026年营销策划师招聘笔试题
- 2026年某协会秘书处工作人员招聘2人备考题库附答案详解(突破训练)
- 2026福建厦门工学院人工智能学院教师招聘13人备考题库附答案详解(完整版)
- 2026福建晋江市第二医院医共体编外人员招聘6人备考题库(一)附答案详解(b卷)
- 2026上海交通大学医学院附属瑞金医院医疗岗位招聘备考题库附答案详解(基础题)
- 2026年安徽艺术学院专职思政课教师招聘1人备考题库含答案详解(综合题)
- 2026赫章鑫晨建工(集团)有限公司招聘6人备考题库及答案详解(全优)
- 2026浙江中外运有限公司温州分公司招聘2人备考题库及一套答案详解
- 2026云南宏合新型材料有限公司招聘备考题库及答案详解一套
- 实施指南(2025)《DL-T5187.3-2012 火力发电厂运煤设计技术规程第 3 部分》
- DB65-T 4877-2024 学校食堂“互联网+明厨亮灶”建设规范
- 2024年下半年成都铁路文化传媒有限责任公司校招笔试题带答案
- 【MOOC答案】《电子线路设计、测试与实验(二)》(华中科技大学)章节作业慕课答案
- 特殊困难老年人家庭适老化改造工作台账
- 标准化厂房总体设计方案
- 关键设备检修管理制度
- 北师大版五年级数学下册 第八单元 1复式条形统计图 同步练习(含答案)
- DB37T 5069-2016 太阳能热水系统安装及验收技术规程
- 《土建施工员培训》课件
- 2025年江苏省南通市中考生物试卷(含答案解析)
评论
0/150
提交评论