版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验目的加深对IP地址及subnet的认识;了解IP地址的划分;了解subnet的作用和产生因素,subnet的划分;实际操作编写规则,匹配IP和subnet,加深理解实验环境(软件、硬件及条件)软件操作系统:Windows7(WindowsNT以上版本皆可)编程环境:MicrosoftVisualStudio2008(兼容MSVS2005,亦可使用VC6.0等)编程语言:C+测试环境:MS-DOS硬件现阶段常见PC实验方法Part1实验原理我们说过因特网是把全世界的无数个网络连接起来的一个庞大的网间网,每个网络中的计算机通过其自身的IP地址而被唯一标识的,据此我们也可以设想,在Interne
2、t上这个庞大的网间网中,每个网络也有自己的标识符。我们把计算机的IP地址也分成两部分,分别为网络标识和主机标识。同一个物理网络上的所有主机都用同一个网络标识,网络上的一个主机(包括网络上工作站、服务器和路由器等)都有一个主机标识与其对应IP地址的4个字节划分为2个部分,一部分用以标明具体的网络段,即网络标识;另一部分用以标明具体的节点,即主机标识,也就是说某个网络中的特定的计算机号码。另一方面,只有在一个网络号下的计算机之间才能直接互通,不同网络号的计算机要通过网关(Gateway)才能互通。但这样的划分在某些情况下显得并十分不灵活。为此IP网络还允许划分成更小的网络,称为子网(Subnet)
3、,这样就产生了子网掩码1.IP的寻址规则(1).网络寻址规则A、网络地址必须唯一。B、网络标识不能以数字127开头。在A类地址中,数字127保留给内部回送函数。C、网络标识的第一个字节不能为255。数字255作为广播地址。D、网络标识的第一个字节不能为“0”,“0”表示该地址是本地主机,不能传送。2.主机寻址规则A、主机标识在同一网络内必须是唯一的。B、主机标识的各个位不能都为“1”,如果所有位都为T”,则该机地址是广播地址,而非主机的地址。C、主机标识的各个位不能都为“0”,如果各个位都为“0”,则表示“只有这个网络”,而这个网络上没有任何主机。确定子网掩码数用于子网掩码的位数决定于可能的子
4、网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。定义子网掩码的步骤为:A、确定哪些组地址归我们使用。比如我们申请到的网络号为“128.73ab”,该网络地址为B类IP地址,网络标识为“128.73”,主机标识为“a.b”。B、根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们现在需要12个子网,将来可能需要16个。用第三个字节的前四位确定子网掩码。前四位都置为“1”,即第三个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。C、把对应初始网络的各个位都置为“1”,即前两个字节都置为“1”,第四个字节都
5、置为“0”,则子网掩码的间断二进制形式为:“11111111.11111111.11110000.00000000”D、把这个数转化为间断十进制形式为:“255.255.240.0”这个数为该网络的子网掩码。4.IP掩码的标注A、无子网的标注法对无子网的IP地址,可写成主机号为0的掩码。如IP地址210.73.140.5,掩码为255.255.255.0,也可以缺省掩码,只写IP地址。B、有子网的标注法有子网时,一定要二者配对出现。以C类地址为例。IP地址中的前3个字节表示网络号,后一个字节既表明子网号,又说明主机号,还说明两个IP地址是否属于一个网段。如果属于同一网络区间,这两个地址间的信息
6、交换就不通过路由器。如果不属同一网络区间,也就是子网号不同,两个地址的信息交换就要通过路由器进行。例如:假设maskwe为27,对于IP地址为210.73.140.5的主机来说,其主机标识为00000101,对于IP地址为210.73.140.16的主机来说它的主机标识为00010000,以上两个主机标识的前面三位全是000,说明这两个IP地址在同一个网络区域中,这两台主机在交换信息时不需要通过路由器进行;210.73.60.1的主机标识为00000001,210.73.60.252的主机标识为11111100,这两个主机标识的前面三位000与011不同,说明二者在不同的网络区域,要交换信息需
7、要通过路由器。其子网上主机号各为1和252。Part2具体实现通过以上的原理,我们就知道了在检验IP地址和子网检验时应该明确的问题,关键的两点就是把输入的IP(暂且不讨论何种输入形式,且假设为合法输入)分解成各段,然后判断其书否属于另一IP的网络,其中的算法在上面已经说明1.实现流程制定规则设计数据结构算法实现调试测试数据分析2.编程本部分的编程的主要目的是算法的实现,主要的方法是C+中字符串处理。类设计a.属性charip15;用于存放ip地址charip_Temp15;用于存放ip地址charsubnet_mask18;用于存放subnet_mask地址charsubnet18;用于存放s
8、ubnet地址charsubnet_Temp18;用于存放subnet地址intmask;用于存放mask(1的个数)boolmasklsValid;用于判断的个数是否合适,或是否与subnet匹配b.方法构造函数,析构函数:ipTest(char*,char*);/自定义初始化类函数ipTest();/析构函数主判断函数(即主要的方法):voidAllJudgment();判断mask,subnet,ip的合法性问题boolipIsValid(char*);判断ip是否合法BoolsubnetIsValid(char*);判断子网号subnet是否合法boolNoIllegalChar(ch
9、ar*);/ip,subnet地址中非法字符的判断boolmaskIsMatSubnet(int,char*);判断mask与subnet是否匹配工具函数:voidprint();判断ip是否为子网成员,并输出判断结果voidsplit(char*,int*);/把单个字符地址转换为十进制数值型地址(含四段)InttoBinary(inta);/十进制int型数据转换为二进制int型数据char*toString(int*a);把二进制int型数据转换为一个整体的二进制字符型数据主函数intmain(intargc,char*argv)函数1.获取参数2.简单判断参数格式(长度)3若是正常参数
10、,实例化ipTest类4.调用主判断函数voidAlljudgment()判断5输出结果(3)程序流程构造函数实例化ipT劇t类subnetmaskip主判斷AllJudgment()畀縣函数(,工具函数1booliplsValid(cliar*);voidprint();boolubnetlsValid(char*):voidsplit(char*Jnt*);boolNolllegalChar(char*i:InttoBinary(iinta):boolmasklsMatSubnet(int.char*);chai*toString(intn输出print()(4)头文件#include#i
11、nclude#include#include#include#includeusingnamespacestd;实验分析及测试本部分测试了正常输入和非法输入时,程序对输入的判断,编程的环境为VS2008,在解决方案文件夹下面的Debug文件夹里面生成可执行文件;运行MS-DOS,进入Debug文件夹进行测试。算法正确性检测用正确格式和合法的数据的输入,测试Mask和IP的匹配测试数据:IP:128.196.33.12Mask:15和16分析:IP:128.196.33.12属于B类IP地址,前16位位网络段,后16位为主机段,所以Mask至少为16结果截图:碣CiW/indostEmSS.cm
12、d.eiw-rpTetl128JM.33.13/lfi12aiW.33.11站阿配需H7瓷沙13.1.33.12/15121MJ3:Lunct:_Mlki16rl9&.33.1/15切地址=12S=1.33.11tk叭爪匹配时心庸nhn1&t地址合止!切地址話!请捋任咼犍堆議C:tNliebuo14iiatt128=16*33.12/16iZSI19&.33.11imhuH-Msd:1.19&.3.12,d.t切地址:12.i&3.1i土-二二一tt合!!m址注K.n.-XIF地址.33.11于垃骚1啊亠芻这一子网建炷工咅讎盤绥用正确格式和合法的数据的输入,测试主网和子网的匹配测试数据:主网I
13、P:128.196.33.12子网IP:128.196.127.17和128.196.63.17Mask:18分析:主网IP和子网IP都是属于B类IP地址,前8位为网络段,后8位为主机段,Mask至少为16由于Mask为18,可知道在主机段中前两位,也就是IP地址的第9,10位为子网号(18-16=2);而B类IP地址的子网掩码为255.255.0.0所以可知:IP:128.196.33.1210000000.11000100.00100001.000011002位相于,得:00Mask:255.255.0.011111111.11111111.00000000.000000002位相于,得:
14、01IP:128.196.127.1710000000.10000100.01111111.00010001结果为不匹配。截图:IP:128.196.33.1210000000.11000100.00100001.000011002位相于,得:00Mask:255.255.0.011111111.11111111.00000000.000000002位相于,得:00IP:128.196.63.1710000000.10000100.00111111.00010001结果为匹配。截图:补充说明:i)主网和子网匹配的时候,实际上的与运算的位数是Mask个数,即Mask有多少,就相与前多少个位。而以
15、上例子中可知,B类IP地址的子网掩码为255.255.0.0,所以前8位全是1,所以无论IP是多少,相与结果都是1,即不用考虑网络段,直接相与主机段的前n段即可,n=(mask-所属网络分类的主机段位数)。本测试例子中位2。ii)考虑(2)中的两个3个IP地址可以发现当主网IP为128.196.33.12,mask为18时,IP和子网掩码相与,主机号前两位为00,所以可推出,子网IP的只需要主机段的前两位为00,则都可以匹配,即子网IP的第3节(第17位到第24位)为00XXXXXX,转化为十进制就是小于63的整数就可以匹配。输入合法性测试本实验程序规定输入的标准参数输入格式为:X.X.X.X
16、/MASKX.X.X.X,其中:X为0-255的十进制整数,mask为0-32的十进制整数,两个IP地址中间用空格分开,IP地址的为4段,每一段都用分开,IP地址中允许出现空格或其他字符(1)输入的IP地址中含有非法字符测试数据:主网IP:128.196.33.a2子网IP:12e.196.127.17Mask:1h结果截图:(2)输入的IP地址段数不正确测试数据:主网IP:128.33.12子网IP:126.196.Mask:18结果截图:没有输入mask测试数据:主网IP:128.196.33.12子网IP:128.196.33.11结果截图:CslSBrl?ft-35rl213S.l?f
17、c,33-1112fil?6.33-IZift.:12-194.S3.11r卜訓.頁空施超些范图.nwt血与zbn匕不匹配xAirorfL曜人非柱!k为姿數井在4餐范围内Mnk=BLQ&in7Et;.-iQtjBdj.fir-rort:hm.:也址吕.:去!耀一-输入mask超出合法范围测试数据:主网IP:128.196.33.12子网IP:128.196.33.11Mask:35结果截图:输入IP超出合法范围测试数据:主网IP:555.196.33.12子网IP:128.999.33.11Mask:25结果截图:特殊的IP地址测试数据:主网IP:0.0.0.0子网IP:127.1.1.1Ma
18、sk:0结果截图:测试数据:主网IP:0.0.0.0子网IP:255.255.255.255Mask:0结果截图:实验结论本实验根据现在通用的IP地址分配使用规则,设计实验算法,运用C+字符转函数处理,程序实现了基本要求的功能,考虑到了多方面的因素;另一方面,设计之初的思路把此程序定位在接口工具程序,所以省略掉UI的设计,考虑到了扩展性的方面需要,程序提供简单、方便的接口和较为简单参数,方便扩展使用。仍存在的问题:数据结构的设计不够清晰简练和方便使用,可读性不太好;主函数流程存在一定的问题,理路不是很清晰,主要是类的各个方法的设计没有总体考虑,设计之初没有考虑,在需要时才加,导致程序结构有点乱
19、,不易阅读和检查。六附录源代码说明:源文件语言:C+文件数:1源文件名:ipTest.cpp#include#include#include#include#include#includeusingnamespacestd;/ipTest类定义classipTestcharip15;用于存放ip地址charip_Temp15;用于存放ip地址charsubnet_mask18;用于存放subnet_mask地址charsubnet18;用于存放subnet地址charsubnet_Temp18;用于存放subnet地址intmask;用于存放mask(1的个数)boolmasklsValid;
20、用于判断的个数是否合适,或是否与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是否为子网成员
21、,并输出判断结果voidsplit(char*,int*);/把单个字符地址转换为十进制数值型地址(含四段)inttoBinary(inta);十进制int型数据转换为二进制int型数据char*toString(int*a);/巴二进制int型数据转换为一个整体的二进制字符型数据;/main主函数intmain(intargc,char*argv)/自动读取数据cout目录地址:argvOendl;argv0表示ipTest.exe的保存目录地址coutsubnet_mask:argv1endl;/argv1表示第二个参数,即subnet/maskcoutip地址:argv2endlendl
22、;/argv2表示第三个参数,即ip/判断段数是否输入合法if(argc!=3)/argc表示输入的参数个数,无参数输入时,其值为,因为默认argvO总是有的cout18)cout15)coutip输入非法!;system(pause);returnO;ipTesttest(argv1,argv2);/实例化类,传入两个参数test.AIIJudgment();调用函数,判断mask,subnet,ip的合法性问题system(pause);系统暂停returnO;/构造函数ipTest:ipTest(char*subnet_mask,char*ip)maskIsValid=true;设置ma
23、sklsValid默认为合法chartemp2;定义变量inti,len;len=strlen(subnet_mask);*从subnet/mask中分离出subnet地址*/for(i=O;isubneti=subnet_maski;this-subnet_Tempi=subnet_maski;subnet_Tempi=0;subneti=0;*判断mask是否为数值*/if(len-(i+1)0)判断mask是否为一/二位字节计(len-(i+1)=1)表明mask是一位temp0=subnet_maski+1;/判断字符是否为数值型字符if(!isdigit(temp0)/isdigit
24、()为库函数,可以调用coutmask中含有非数字的非法字符,error!endl;maskIsValid=false;/mask不是数值,则设置为falseelseif(len-3)=i)表明mask是二位temp0=subnet_maski+1;temp1=subnet_maski+2;if(!(isdigit(temp0)&isdigit(temp1)coutmask中含有非数字的非法字符,error!endl;maskIsValid=false;mask=atoi(temp);/自动把数字字符转换为对应的十进制数值的函数if(mask32)maskIsValid=false;else表
25、明mask为空或字节超出范围coutmask为空或超出范围,error!mH?回固voidipTesrTA-Judgment()、嘛m鉗subne蛊障御珊业讯罟boo庖織w斗舗冋subneusva=d因嬉迤彗boo-subnetISVHSUbnetIsva=d(subnerTemp);boo-iplsvl!.PISVa-id(一PITemp);、嘛micljmasklljrsubne芹克砌闻團罟boo-wamasklsMatSubnet因嬉迤彗boo-maskISMatsubHmaskISMatsubnet(mask、subnerlTemp);cout人人end-;迤彗济回罟晞砌珊涉冊*ama
26、sklsva=d)、lsi回smasklsva=dfa-secout人人-mask鄭JJEm二mask涉疇嬉斗申32ntH3-AAendbe-secout人人-mask血7讯-人人end-;amasklsMatsub)、11回罟maskISMatsubfa-secout人人-maskmsubner-h莎闫nseerror-A人end-;e-secout人人-maskllJrsubnet.AAend-;asubnetlsv)、lsi回m-gsubnetlsvfa-secout人人-subnetstlt皿Em一-A人end-je-secoutsubnet地址合法!endl;if(!ipIsV)表示
27、返回的ipIsV是falsecoutip地址非法!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;/把单个字符地址转换为十进制数值型地址(含四段)voidipTes
28、t:split(char*chaddr,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)returnfal
29、se;returntrue;判断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的段数不是,err
30、or!endl;returnfalse;判断地址中的.是否正确*/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;首
31、先设置为非法,即全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)
32、223&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
33、=j2;iiplen;i+)if(atoi(doti)!=255)flag=0;if(flag=1)coutip地址ip的主机号全,error!endl;returnfalse;returntrue;判断子网号subnet是否合法boolipTest:subnetIsValid(char*subnet)计(!ipIsValid(subnet)/调用判断Ip的函数ipIsValid()进行判断returnfalse;returntrue;判断ip是否为子网成员,并输出判断结果voidipTest:print()charsubnet_one15,ip_one15;intnbip4,nbsubnet
34、4,i;strcpy(subnet_one,subnet);把subnet地址复制给subnet_onestrcpy(ip_one,ip);把ipt地址复制给ip_onesplit()函数把字符型的地址转换为四段int型的地址split(subnet_one,nbsubnet);用subnet_one而非subnet是为了保护subnet地址不被破坏split(ip_one,nbip);for(i=0;i4;i+)nbipi=toBinary(nbipi);将分离出来的十进制转换为二进制nbsubneti=toBinary(nbsubneti);char*cbip=newchar33;char*cbsubnet=newchar33;cbip=toStr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年注册测绘师考试模拟题及答案(测绘管理与法律法规)(辽宁辽阳)
- 第二单元综合测试卷二(单元测试)2025-2026学年二年级数学下册人教版(含答案)
- 2026年福建福州招聘事业单位笔试附答案试题及答案
- 2026法制方面面试题及答案
- 凝血因子Ⅺ抑制剂在心血管疾病中的研究进展
- 2025南京银行南通分行国际业务阶段性社会招聘笔试历年典型考题及考点剖析附带答案详解2套
- 2025华夏银行成都分行社会招聘综合柜员笔试历年典型考题及考点剖析附带答案详解2套
- 2025北京易兴元石化科技有限公司人力资源岗招聘1人笔试历年常考点试题专练附带答案详解
- 脚手架工程安全生产管理方案
- 疾病预防控制中心实验楼工程农用地转用方案
- 2026年重庆市渝中学区八下生物期末统考试题含解析
- 加油站全员安全生产责任书
- 镇建设工程管理内控制度
- 泄泻病中医诊疗规范
- 2026年腾讯公司HR面试常见问题及答案
- 江苏省镇江市丹阳市2024-2025学年高一上学期1月期末物理试题(含答案)
- 国家开放大学电大《乡镇行政管理》期末题库及答案
- 3.围手术期质量管理第2部分:手术前管理北京围手术期医学研究会团体标准TBPM01.2-2023
- 中国通信建设北京工程局笔试
- 2025年湖北武汉中考语文试题解读及备考技巧指导
- 江苏省盐城市2024-2025年七年级下学期期末考试生物试卷(含答案)
评论
0/150
提交评论