版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
..目录1课程设计目的12课程设计要求13相关知识14课程设计分析34.1程序大致设计过程34.2实验流程图35程序代码56运行结果与分析117参考文献12..课程设计目的本设计要求编写程序,判断一个IP地址是否合法,并判断该地址是否属于一个给定子网。从而考察读者是否对IP地址概念及其子网划分有非常清楚的认识。2课程设计的要求根据介绍的IP地址与子网划分的知识,编写程序判断IP地址的合法性及所属子网。(1)以命令行形式运行IPAddresssubnet_address/maskip_address其中,IPAddress为程序名,subnet_address为子网地址,mask为掩码,ip_address为IP地址。(2)输入容:IP地址、子网地址与掩码是否合法,以及IP地址是否属于子网。3相关知识IP地址相关概念所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照TCP/IP〔TransportControlProtocol/InternetProtocol,传输控制协议/Internet协议〕协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。例如一个采用二进制形式的IP地址是"0001〞,这么长的地址,人们处理起来也太费力了。为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号".〞分开不同的字节。于是,上面的IP地址可以表示为"10.0.0.1〞。IP地址的这种表示法叫做"点分十进制表示法〞,这显然比1和0容易记忆得多。大型的互连网络中应该有一个全局的地址系统,它能够给连接到互联网的每一台主机或者路由器分配一个唯一的全局地址。TCP/IP协议的网络层使用的地址标识符叫做IP地址,IPv4中IP地址是一个32位的二进制地址。网络中的每一台主机或者路由器至少有一个IP地址,在Internet中不允许有两个设备具有一样的IP地址。如果一台主机或者路由器连接到两个或多个物理网络,那么它可以拥有两个或多个IP地址。IP地址采用分层构造,由网络号与主机号两局部组成〔如下列图1所示〕:网络号主机号图1IP地址长度为32位,用点分十进制表示,格式为ⅹ.ⅹ.ⅹ.ⅹ,每个ⅹ为8位,每个ⅹ的值为0—255〔例如202.113.29.119〕。根据不同的取值围,IP地址可以分为五类,IP地址中的前5位用于标识IP地址的类别,具体的分类规那么如下:·A类地址的第一位为0。·B类地址的前两位为10.·C类地址的前三位为110。·D类地址的前四位为1110。·E类地址的前五位为11110。五类IP地址的构造如下列图2所示;0网络号〔7位〕主机号〔24位〕10网络号〔14位〕主机号〔16位〕110网络号〔21位〕主机号〔8位〕1110组播地址〔28位〕11110保存用于课程设计和将来使用图2A类IP地址构造适合用于有大量主机的大型网络。由于主机号长度为24位,因此每个A类网络的主机IP数理论上为224=16777216。B类IP地址适合用于一些国际性大公司与政府机构等中等大小的组织。由于网络IP长度为14位,因此允许有214=16384个不同的B类网络,实际允许连接16382个网络。C类IP地址适合用于一些小公司与普通的研究机构。2.子网的划分划分子网实际上就是在IP地址系统中增加一个层次。三级IP地址的表示方法为netID-subnetID-hostID。第一级网络号定义了网点的位置;第二级子网号定义了物理子网;第三级主机号定义了主机和路由器到物理网络的连接。三级层次的IP地址,一个IP分组的路由器的过程分为三步:第一步将分组转发给网点,第二步转发给物理子网,第三步转发给确切的主机。当三级层次的IP地址提出后,一个很显示的问题是:如何从一个IP地址提取出子网号。因此,提出了子网掩码〔subnetmask〕的概念。子网掩码有时也叫做子网掩码。子网掩码表示方法:网络号与子网号置1,主机号置0。4.课程设计分析4.1程序大致设计过程:1.分别判断子网号、掩码和IP地址的根本格式是否合法。2.如果三者的根本格式都合法,才调用判定"IP地址是否为子网成员〞的函数。该函数同时判别子网号与掩码是否匹配,子网号为全0或全1,主机号为全0、全1.4.2实验流程图如下:1.主流程图YNYYYYNYYYNNN开场子网是否合法Ip地址是否属于子网完毕掩码是否合法ip地址是否合法图3主流程图2.验证ip地址合法性流程图YYN开场完毕用正那么表达式判断是否合法输入ip地址图4验证ip地址合法性流程图3验证子网掩码合法性流程图YYN开场完毕用正那么表达式判断是否合法输入子网掩码图5验证子网掩码合法性流程图5程序代码#include<iostream.h>#include<string.h>#include<stdlib.h>#include<ctype.h>//定义ip地址类classipTest{charip[15];charsubnetPlusMask[18];charsubnet[10];charTempIp[15];charTempSub[10];intmask;boolmaskIsValid;public: ipTest(char*,char*); ~ipTest(){}; boolNoIllegalChar(char*); boolipIsValid(char*); boolsubnetIsValid(char*); voidbelong(); voidprint(); };voidmain(intargc,char*argv[]){//检查输入命令格式 if(argc!=3) { cout<<"PleaseInputmand:ip_testsubnet/maskip"; return; }else{//判断IP地址长度是否超出 if(strlen(argv[1])>18) { cout<<"Subnet/maskistoolong!"; return; } if(strlen(argv[2])>15) {cout<<"IpAddressistoolong!"; return; } //实例化ipTest类 ipTesttest(argv[1],argv[2]); test.print();}}//IP地址类构造函数ipTest::ipTest(char*subnetPlusMask,char*ip) { maskIsValid=true; chartemp[2]; //将'1'前的字符复制到subnet中 intsmLen=strlen(subnetPlusMask); for(inti=0;i<smLen&&subnetPlusMask[i]!='/';i++) { this->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 maskIsValid=false;//为subnetPlusMask与ip赋值strcpy(this->subnetPlusMask,subnetPlusMask);strcpy(this->ip,ip);strcpy(this->TempIp,ip);}//调用判别函数并输出结果voidipTest::print(){ boolsubIsV=subnetIsValid(TempSub); boolipIsV=ipIsValid(TempIp); //判断子网是否合法 if(!subIsV) cout<<"Subnetisinvalid"<<endl; else cout<<"Validsubnet:"<<subnet<<endl; //判断掩码是否合法 if(!maskIsValid) cout<<"Maskisinvalid"<<endl; else cout<<"Validmask:"<<mask<<endl; //判断是否IP地址合法 if(ipIsV) cout<<"IPadressisinvalid"<<endl;elsecout<<"Validipaddress:"<<endl;//判断IP地址是否属于子网if(subIsV&&ipIsV&&maskIsValid)belong();}//判断是否含有非数字字符boolipTest::NoIllegalChar(char*ch){ unsignedinti; unsignedintk=0; //判断每位是否为数字字符 for(i=0;i<strlen(ch);i++) if(isdigit(*(ch+i))==0) returnfalse; returntrue;}//判断IP地址是否合法boolipTest::ipIsValid(char*ip){ charch[]="."; char*token,*dot[4]; intiplen=0; //以"."标志将字符串按节分开//以"."标志将IP字符串按节分开token=strtok(ip,ch);while(token!=NULL){ dot[iplen]=token; iplen++; token=strtok(NULL,ch);}//判断IP地址的段数if(iplen!=4)returnfalse;//有非法字符或某段值非法for(inti=0;i<4;i++)if(!NoIllegalChar(dot[i])||atoi(dot[i])>255) returnfalse;returnfalse;}//判断子网是否合法boolipTest::subnetIsValid(char*subnet){ //调用判别地址合法性函数 if(!ipIsValid(subnet)) returnfalse;returntrue;}//判断IP地址是否为子网成员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++) { //temp数组中放'.'间的串 if(subnet[i]!='.') temp[j++]=subnet[i]; else { subA[3-t]=atoi(temp); j=0; t++; temp[0]=temp[1]=temp[2]='\0'; } }subA[0]=atoi(temp);temp[0]=temp[1]=temp[2]='\0';iSubA=*(unsignedint*)subA; for(i=0,j=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; //获得掩码子网号与掩码不匹配 iMask=0xffffffff;iMask<<=(32-mask); //子网号与掩码不匹配 if((iSubA|iMask)!=iMask) {cout<<"Subnetandmasknotmatch!";return;}//子网号为全1if((iSubA^iMask)==0){cout<<"Subnetisall1!";
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 病理技师考试试题及答案
- 2025年外转子风机合作协议书
- 2026年甘肃省庆阳市社区工作者考试题库及答案
- 2025年山东(专升本)理化考试真题及参考答案
- 美妆彩妆膏体调色技师(中级)考试试卷及答案
- 冷水鱼养殖技术工程师岗位招聘考试试卷及答案
- 老年口腔护理产品研发工程师岗位招聘考试试卷及答案
- 快递面单信息脱敏处理员岗位招聘考试试卷及答案
- 电梯行业绿色节能技术研究
- 专利申请与保护操作流程指南
- 藤县介绍教学课件
- 2025至2030电阻式随机存取存储器行业调研及市场前景预测评估报告
- 2026年苏州工业园区服务外包职业学院单招职业技能考试备考试题附答案详解
- 护理学专升本2025年模拟冲刺试卷(含答案)
- 水电站电气检修知识培训课件
- 2025年高考作文备考训练之“”犯错“与”试错作文导写
- 高危儿规范化健康管理专家共识
- 阿里斯托芬喜剧集
- 隧道工程临时设施标准化图册
- 【杜邦分析法下海天味业公司(2018-2022)盈利能力分析10000字(论文)】
- 2023学年广东省深圳红岭中学生物高二第二学期期末联考试题(含解析)
评论
0/150
提交评论