IP地址合法性判断子网检测大学课程设计实验报告_第1页
IP地址合法性判断子网检测大学课程设计实验报告_第2页
IP地址合法性判断子网检测大学课程设计实验报告_第3页
IP地址合法性判断子网检测大学课程设计实验报告_第4页
IP地址合法性判断子网检测大学课程设计实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、IP地址合法性判断及子网检测大学课程设计实验报告IP地址合法性判断及子网检测大学课程设计实验报告18/18IP地址合法性判断及子网检测大学课程设计实验报告四川理工学院实验报告实验名称IP地址合法性判断及子网查验课程名称计算机科学与技术姓名成绩班级学号日期2013年1月地址计算机学院一.实验目的本设计要求编写写程序,判断一个ip地址能否合法,并判断该地址能否属于一个给定子网,进而观察读者能否对ip地址见解及其子网区分有特别清楚的认识。1加深对IP地址及subnet的认识;2认识IP地址的区分;认识subnet的作用和产生要素,subnet的区分;4.实质操作编写规则,般配IP和subnet,加深

2、理解二.设计要求在掌握ip地址表示方法及子网区分方法的基础上,按以下要求达成程序。1:命令格式:ip_testsubnet/maskip_addr此中,ip_test为程序名;subnet为子网号,mask是一个数值,代表子网掩码连续1的个数,ip_addr是要测试的ip地址。2:判断subnet和ip_addr的合法性。在判断ip地址合法性时要自行编代码,不要使用任何inet函数。判断时要考虑全面。3:判断掩码的合法性。4:在ip地址合法的前提下,判断ip_addr能否属于子网subnet。5:输出命令行中的ip能否合法,掩码能否合法,以及ip_addr能否属于子网subnet.三.实验环境

3、(软件、硬件及条件)1软件操作系统:Windowsxp(WindowsNT以上版本皆可)编程环境:MicrosoftVisualStudio2008(兼容MSVS2005,亦可使用VC6.0等)编程语言:C+测试环境:MS-DOS2硬件现阶段常有PC四.实验方法Part1实验原理我们说过因特网是把全球的无数个网络连结起来的一个弘大的网间网,每个网络中的计算机经过其自己的IP地址而被独一表记的,据此我们也可以假想,在Internet上这个弘大的网间网中,每个网络也有自己的表记符。我们把计算机的IP地址也分红两部分,分别为网络表记和主机表记。同一个物理网络上的全部主机都用同一个网络表记,网络上的一

4、个主机(包含网络上工作站、服务器和路由器等)都有一个主机表记与其对应IP地址的4个字节区分为2个部分,一部分用以注明详细的网络段,即网络表记;另一部分用以注明详细的节点,即主机标识,也就是说某个网络中的特定的计算机号码。另一方面,只有在一个网络号下的计算机之间才能直接互通,不一样样网络号的计算机要经过网关(Gateway)才能互通。但这样的区分在某些状况下显得并十分不灵巧。为此IP网络还赞成区分红更小的网络,称为子网(Subnet),这样就产生了子网掩码1.IP的寻址规则(1).ip分类规则a、网络地址必然独一。b、网络表记不可以以数字127开头。在A类地址的第一位为0,数字127保存给内部回

5、送函数。B类地址的前两位为10;C类地址的前三位为110;D类地址的前四位为1110;E类地址的前五位为11110。c、网络表记的第一个字节不可以为255。数字255作为广播地址。d、网络表记的第一个字节不可以为“0”,“0”表示该地址是当地主机,不可以传达。e、不合法的IP地址种类:123.2.1123.23$.2.12.主机寻址规则a、主机表记在同一网络内必然是独一的。b、主机表记的各个位不可以都为“1”,假如全部位都为“1”,则该机地址是广播地址,而非主机的地址。c、主机表记的各个位不可以都为“0”,假如各个位都为“0”,则表示“只有这个网络”,而这个网络上没有任何主机。确立子网掩码数用

6、于子网掩码的位数决定于可能的子网数量和每个子网的主机数量。在定义子网掩码前,必然弄清楚原来使用的子网数和主机数量。定义子网掩码的步骤为:a、确立哪些组地址归我们使用。比方我们申请到的网络号为“128B类IP地址,网络表记为“128.73”,主机表记为“a.b”。b、依据我们此刻所需的子网数以及未来可能扩大到的子网数,用宿主机的一些位来定义子网掩码。比方我们此刻需要12个子网,未来可能需要16个。用第三个字节的前四位确立子网掩码。前四位都置为“1”,即第三个字节为“,这个数我们暂时称作新的二进制子网掩码。c、把对应初始网络的各个位都置为“1”,即前两个字节都置为“1”,第四个字节都置为“0”d、

7、把这个数转变为中断十进制形式为:“255.255.240.0”这个数为该网络的子网掩码。4.IP掩码的注明A、无子网的注明法B、有子网的注明法有子网时,必然要两者配对出现。以C类地址为例。IP地址中的前3个字节表示网络号,后一个字节既表示子网号,又说明主机号,还说明两个IP地址能否属于一个网段。假如属于同一网络区间,这两个地址间的信息互换就不经过路由器。假如不属同一网络区间,也就是子网号不一样样,两个地址的信息互换就要经过路由器进行。比方:假定maskwe为27,;2Part2详细实现经过以上的原理,我们就知道了在查验IP地址和子网查验时应当明确的问题,重点的两点就是把输入的IP分解成各段,此

8、后判断子网号,掩码和ip地址的基本格式能否合法,其次:假如三者的基本格式都合法,才调用判断,ip地址能否为子网成员,的函数。该函数同时鉴别子网号与掩码能否般配,子网号为全0或全1,主机号为全0、全1。1.实现流程制定规则分别判断子网号,掩码,ip设计数据结构算法实现调试测试2.编程数据分析本部分的编程的主要目的是算法的实现,主要的方法是C+中字符串办理。(1)类设计a.属性charip15;/用于寄存ip地址charip_Temp15;/用于寄存ip地址charsubnet_mask18;/用于寄存subnet_mask地址charsubnet18;/用于寄存subnet地址charsubne

9、t_Temp18;/用于寄存subnet地址intmask;/用于寄存mask(1的个数)boolmaskIsValid;/用于判断的个数能否适合,或能否与subnet般配方法结构函数,析构函数:ipTest(char*,char*);/自定义初始化类函数ipTest();/析构函数主判断函数(即主要的方法):voidAllJudgment();/判断mask,subnet,ip的合法性问题boolipIsValid(char*);/判断ip能否合法BoolsubnetIsValid(char*);/判断子网号subnet能否合法boolNoIllegalChar(char*);/ip,sub

10、net地址中非法字符的判断boolmaskIsMatSubnet(int,char*);/判断mask与subnet能否般配工具函数:voidprint();/判断ip能否为子网成员,并输出判断结果voidsplit(char*,int*);/把单个字符地址变换为十进制数值型地址(含四段)InttoBinary(inta);/十进制int型数据变换为二进制int型数据char*toString(int*a);/把二进制int型数据变换为一个整体的二进制字符型数据主函数intmain(intargc,char*argv)函数获得参数简单判断参数格式(长度)假如正常参数,实例化ipTest类4.调

11、用主判断函数voidAllJudgment()判断输出结果程序流程头文件#include#include#include#include#include#includeusingnamespacestd;五.实验分析及测试本部分测试了正常输入和非法输入时,程序对输入的判断,编程的环境为VS2008,在解决方案文件夹下边的Debug文件夹里面生成可履行文件;运转MS-DOS,进入Debug文件夹进行测试。算法正确性检测(1)用正确格式和合法的数据的输入,测试Mask和IP的般配Mask:15和16结果截图:(2)用正确格式和合法的数据的输入,测试主网和子网的般配Mask:18因此可知:00100

12、001.000011002位相于,得:00M00000000.000000002位相于,得:0101111111.00010001结果为不般配。截图:00100001.000011002位相于,得:00M00000000.000000002位相于,得:0000111111.00010001结果为般配。截图:增补说明:考虑(2)输入合法性测试本实验程序规定输入的标准参数输入,此中:X为0-255的十进制整数,mask为0-32的十进制整数,两个IP地址中间用空格分开,IP地址的为4段,每一段都用“.”分开,IP地址中赞成出现空格或其余字符输入的IP地址中含有非法字符测试数据:a2子网IP:12e

13、Mask:1h结果截图:输入的IP地址段数不正确测试数据:主网IP:128.33.12子网IP:126.196.Mask:18结果截图:没有输入mask.11结果截图:输入mask高出合法范围Mask:35结果截图:输入IP高出合法范围Mask:25结果截图:特其余IP地址测试数据:主网IP:Mask:0结果截图:测试数据:主网IP:Mask:0结果截图:六.实验结论本实验依据此刻通用的IP地址分派使用规则,设计实验算法,运用C+字符转函数办理,程序实现了基本要求的功能,考虑到了多方面的要素;另一方面,设计之初的思路把此程序定位在接口工具程序,因此省略掉UI的设计,考虑到了扩展性的方面需要,程

14、序供给简单、方便的接口和较为简单参数,方便扩展使用。仍存在的问题:数据结构的设计不够清楚精练和方便使用,可读性不太好;主函数流程存在必然的问题,理路不是很清楚,主假如类的各个方法的设计没有整体考虑,设计之初没有考虑,在需要时才加,致使程序结构有点乱,不易阅读和检查。七.附录源代码说明:源文件语言:C+文件数:1源文件名:ipTest.cpp#include#include#include#include#include#includeusingnamespacestd;/ipTest类定义classipTestcharip15;/用于寄存ip地址charip_Temp15;/用于寄存ip地址c

15、harsubnet_mask18;/用于寄存subnet_mask地址charsubnet18;/用于寄存subnet地址charsubnet_Temp18;/用于寄存subnet地址intmask;/用于寄存mask(1的个数)boolmaskIsValid;/用于判断的个数能否适合,或能否与subnet般配public:ipTest(char*,char*);/自定义初始化类函数ipTest();/析构函数boolipIsValid(char*);/判断ip能否合法boolsubnetIsValid(char*);/判断子网号subnet能否合法boolNoIllegalChar(char

16、*);/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(inta

17、rgc,char*argv)/自动读取数据/cout目录地址:argv0endl;/argv0表示ipTest.exe的保存目录地址coutsubnet_mask:argv1endl;/argv1表示第二个参数,即subnet/maskcoutip地址:argv2endlendl;/argv2表示第三个参数,即ip判断段数能否输入合法if(argc!=3)/argc表示输入的参数个数,无参数输入时,其值为,由于默认argv0老是有的cout18)cout15)coutip输入非法!;system(pause);return0;ipTesttest(argv1,argv2);/实例化类,传入两个

18、参数test.AllJudgment();/调用函数,判断mask,subnet,ip的合法性问题system(pause);/系统暂停return0;/结构函数ipTest:ipTest(char*subnet_mask,char*ip)maskIsValid=true;/设置maskIsValid默以为合法chartemp2;/定义变量inti,len;len=strlen(subnet_mask);/*从subnet/mask中分别出subnetfor(i=0;isubneti=subnet_maski;this-subnet_Tempi=subnet_maski;subnet_Temp

19、i=0;subneti=0;/*判断mask能否为数值*/if(len-(i+1)0)/判断mask能否为一/二位字节if(len-(i+1)=1)/表示mask是一位temp0=subnet_maski+1;判断字符能否为数值型字符if(!isdigit(temp0)/isdigit()为库函数,可以调用coutmask中含有非数字的非法字符,error!endl;maskIsValid=false;/mask不是数值,则设置为falseelseif(len-3)=i)/表示mask是二位temp0=subnet_maski+1;temp1=subnet_maski+2;if(!(isdig

20、it(temp0)&isdigit(temp1)coutmask中含有非数字的非法字符,error!endl;maskIsValid=false;mask=atoi(temp);/自动把数字字符变换为对应的十进制数值的函数if(mask32)maskIsValid=false;else/表示mask为空或字节高出范围coutmask为空或高出范围,error!subnet_mask,subnet_mask);/strcpy(this-ip,ip);/给ip赋值strcpy(this-ip_Temp,ip);/给ip_temp赋值给subnet_mask赋值/判断mask,subnet,ip的合

21、法性问题voidipTest:AllJudgment()/设置标记subnet地址能否合法的bool型变量,并调用subnetIsValid函数判断boolsubnetIsV=subnetIsValid(subnet_Temp);设置标记ip地址能否合法的bool型变量,并调用ipIsValid函数判断boolipIsV=ipIsValid(ip_Temp);/设置标记mask与subnet地址能否般配的bool型变量,并调用maskIsMatSubnetboolmaskIsMatSub=maskIsMatSubnet(mask,subnet_Temp);coutendl;/*判断返回的值能否

22、为真*/if(!maskIsValid)/表示返回的maskIsValid是false函数判断coutmask输入非法!(mask为整数并在-32范围内)endl;elsecoutmask合法!endl;if(!maskIsMatSub)/表示返回的maskIsMatSub是falsecoutmask与subnet不般配,error!endl;elsecoutmask与subnet般配!endl;if(!subnetIsV)表示返回的subnetIsV是falsecoutsubnet地址非法!endl;elsecoutsubnet地址合法!endl;if(!ipIsV)表示返回的ipIsV是f

23、alsecoutip地址非法!endl;elsecoutip地址合法!0&nbsubnet0127&mask8)/mask的值小于coutmask与subnet不般配,error!=128&nbsubnet0=191&mask16)/mask的值小于coutmask与subnet不般配,error!=192&nbsubnet0=223&mask24)/mask的值小于coutmask与subnet不般配,error!endl;returnfalse;/mask与subnet地址般配returntrue;把单个字符地址变换为十进制数值型地址(含四段)voidipTest:split(char*c

24、haddr,int*addr)charch=.;char*token,*dot4;intiplen=0;token=strtok(chaddr,ch);while(token!=NULL)dotiplen=token;addriplen=atoi(dotiplen);/atoi()函数把字符数值变换为int型数值iplen+;token=strtok(NULL,ch);/ip,subnet地址中非法字符的判断boolipTest:NoIllegalChar(char*ch)inti,len=strlen(ch);for(i=0;i9|chi-00)returnfalse;returntrue;

25、判断ip能否合法boolipTest:ipIsValid(char*ip)/*把地址分为四段,保存在dot中*/charch=.;charip_one18;strcpy(ip_one,ip);char*token,*dot4;intiplen=0;/库函数strtok(),以ch为界线来分段token=strtok(ip_one,ch);while(token!=NULL)dotiplen=token;iplen+;token=strtok(NULL,ch);/此时,第一个参数必然换为NULL/*判断地址中的段数*/if(iplen!=4)cout地址ip的段数不是,error!endl;re

26、turnfalse;/*判断地址中的.能否正确*/intj,t=0;for(j=0;j=strlen(ip);j+)if(ipj=.)t+;if(t!=3)cout地址ip中的.不是,error!endl;returnfalse;/*判断地址能否含有非法字符,每段地址数值溢出*/inti;for(i=0;i255)if(!NoIllegalChar(doti)/判断含有非法字符cout地址ip中含有非数字的非法字符,error!255)/判断数值溢出cout地址ip中含有不在-255间的数字,error!endl;returnfalse;/*判断全或全的状况*/intflag=1;/第一设置为

27、非法,即全for(i=0;iiplen;i+)if(atoi(doti)!=0)含有非的字段flag=0;if(flag=1)cout地址ip全为全,error!endl;returnfalse;flag=1;/第一设置为非法,即全for(i=0;iiplen;i+)if(atoi(doti)!=255)flag=0;if(flag=1)cout地址ip全为全,error!0&atoi(dot0)127)/A类ip地址j1=1;/直接从开始if(atoi(dot0)=127)/为的特又名coutip地址ip网络号为!,error!=128&atoi(dot0)=192&atoi(dot0)22

28、3&atoi(dot0)255)cout请从头输入ip地址ip,仅限于A,B和C类ip地址,error!endl;returnfalse;/*if(atoi(dot0)=255)coutip地址ip网络号全为,error!endl;returnfalse;*/j2=j1;/j1用于判断全状况,j1用于判断全状况的初步下标intflag=1;/第一设置为非法,即主机号全for(i=j1;iiplen;i+)if(atoi(doti)!=0)flag=0;if(flag=1)coutip地址ip的主机号全,error!endl;returnfalse;flag=1;/第一设置为非法,即全for(i

29、=j2;iiplen;i+)if(atoi(doti)!=255)flag=0;if(flag=1)coutip地址ip的主机号全,error!endl;returnfalse;returntrue;判断子网号subnet能否合法boolipTest:subnetIsValid(char*subnet)if(!ipIsValid(subnet)/调用判断Ip的函数ipIsValid()进行判断returnfalse;returntrue;判断ip能否为子网成员,并输出判断结果voidipTest:print()charsubnet_one15,ip_one15;intnbip4,nbsubne

30、t4,i;strcpy(subnet_one,subnet);/把subnet地址复制给subnet_onestrcpy(ip_one,ip);/把ipt地址复制给ip_one/split()函数把字符型的地址变换为四段int型的地址split(subnet_one,nbsubnet);/用subnet_one而非subnet是为了保护split(ip_one,nbip);for(i=0;i4;i+)subnet地址不被损坏nbipi=toBinary(nbipi);/将分别出来的十进制变换为二进制nbsubneti=toBinary(nbsubneti);char*cbip=newchar33;char*cbsubnet=newchar33;cbip=toString(nbip);/将二进制数组变换为位的二进制字符指针cbsubnet=toString(nbsubnet);for(i=0;imask;i+)if(cbip

温馨提示

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

评论

0/150

提交评论