武汉理工大学-计算机网络课程设计-中国好学长系列之小灰灰的爸爸_第1页
武汉理工大学-计算机网络课程设计-中国好学长系列之小灰灰的爸爸_第2页
武汉理工大学-计算机网络课程设计-中国好学长系列之小灰灰的爸爸_第3页
武汉理工大学-计算机网络课程设计-中国好学长系列之小灰灰的爸爸_第4页
武汉理工大学-计算机网络课程设计-中国好学长系列之小灰灰的爸爸_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉理工大学计算机网络课程设计说明书学 号: 课 程 设 计题 目IP地址的合法性及子网判断学 院计算机科学与技术专 业软件工程班 级中国好学长系列姓 名小灰灰的爸爸指导教师刘东飞2014年6月25日课程设计任务书学生姓名: 小灰灰的爸爸 专业班级: 中国好学长系列 指导教师: 刘东飞 工作单位: 计算机学院 题目四: IP地址的合法性及子网判断 初始条件:(1)学习相关知识(2)C/C+/VC/VB/JAVA语言(3)PC机一台要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)在掌握IP地址表示方法及子网划分的基础上,按如下要求完成程序。1)命令行格式:ip_

2、test subnet/mask ip_addr, ip_test其中为程序名;subnet为子网号;mask是一个数值,代表子网掩码连续1的个数;ip_addr是要测试的IP地址。例如,要测试的IP地址为202.114.16.10,子网号为202.113.16.0,子网掩码为255.255.255.0,则命令行为ip_test 202.113.16.0/24 202.114.16.10(因为255.255.255.0是连续的24个1,所以用24表示)。2)判断subnet和ip_addr的合法性。在判断IP地址合法性时要自行编写代码,不要使用任何inet函数。判断时要考虑全面,比如以下IP地

3、址均不合法:123.2.1 / 123.23$.2.1 / 123.2345.2.1 / 123.23.45.2.13)判断掩码的合法性。4)在IP地址合法的前提下,判断ip_addr是否属于子网subnet。5)输出命令行中的ip是否合法,掩码是否合法(可适当给出不合法的原因)以及ip_addr是否属于子网subnet。时间安排:第一、二天:查阅资料,学习算法第三、四天:编程调试第五天:书写报告指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日1 编写目的(1) 掌握IP地址、子网划分等基本概念。(2) 尝试编程判断一个IP地址是否合法,并判断该地址是否属于一个给定的子网。2

4、设计的意义通过本课程的学习,我们掌握了一些信息时代生存与发展必需的信息技术基础知识和基本技能,具备了在日常生活与学习中应用信息技术解决问题的基本态度与基本能力。但是,学生对于程序、病毒的内涵,程序与文档、数据的区别,计算机运行的机理等知识内容的理解比较肤浅。学生如果接触了程度设计,就能真正理解,从而进一步打破计算机的神秘感。程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力

5、的培养。在实际编程实现中,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。所以通过实践我们才能真正掌握知识运用知识。3 内容和要求在掌握IP地址的表示方法以及子网划分方法的基础上,并以计算机网络中关于IP地址的相关理论知识为基石,运用C/C+语言按如下要求完成程序。(1) 在判断一个IP地址合法性时要自行编写代码,不要使用任何inet函数(2) 命令行格式:ip_test subnet/mask ip_addr其中,ip_test为程序

6、名;subnet为子网号;mask是一个整型数值,代表子网掩码连续1的个数;ip_addr表示要测试的IP地址。比如说,要测试的IP地址为202.113.16.10,子网号码是202.113.16.0,子网掩码是255.255.255.0,则命令行为ip_test202.113.16.0/24 202.113.16.10。(因为255.255.255.0是连续的24个1,所以用24表示)(3) 判断subnet和ip_addr的合法性在判断IP地址合法性时要自行编写代码,不要使用任何inet函数。判断时要考虑各种情况,全面分析问题。例如以下IP地址均不合法:123.2.1123.23$.2.1

7、123.2345.2.1123.23.45.1(4) 判断掩码的合法性譬如说mask的值为负数或者大与32,这时输入的掩码就不合法。(5) 在IP地址合法,掩码合法以及子网号也合法的前提下,判断ip_addr是否属于subnet。(6) 输出命令行中的ip是否合法,掩码是否合法,子网号码是否合法(可适当给出不合法的原因)以及ip_addr是否属于子网subnet。(7) 还可以判断子网号,主机号全0,全1问题。4 相关技术4.1 ip地址简介所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。 按照TCP/IP(Transport Control Protocol/I

8、nternet Protocol,传输控制协议/Internet协议)协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。例如一个采用二进制形式的IP地址是“00001010000000000000000000000001”,这么长的地址,人们处理起来也太费劲了。为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“”分开不同的字节。于是,上面的IP地址可以表示为“10001”。IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多。 有人会以为,一台计算机只能有一个IP地址,这种观点是错误的。我们可以指定一台计算机具有多个I

9、P地址,因此在访问互联网时,不要以为一个IP地址就是一台计算机;另外,通过特定的技术,也可以使多台服务器共用一个IP地址,这些服务器在用户看起来就像一台主机似的。 将IP地址分成了网络号和主机号两部分,设计者就必须决定每部分包含多少位。网络号的位数直接决定了可以分配的网络数(计算方法2网络号位数);主机号的位数则决定了网络中最大的主机数(计算方法2主机号位数-2)。然而,由于整个互联网所包含的网络规模可能比较大,也可能比较小,设计者最后聪明的选择了一种灵活的方案:将IP地址空间划分成不同的类别,每一类具有不同的网络号位数和主机号位数。(1) A类IP地址 一个A类IP地址由1字节的网络地址和3

10、字节主机地址组成,网络地址的最高位必须是“0”, 地址范围1001-126255255254(二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110)。可用的A类网络有126个,每个网络能容纳1600多万个主机。 (2) B类IP地址 一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围128101-191254255254(二进制表示为:10000000 00000001 00000000 00000001 - 10111111 1111

11、1110 11111111 11111110)。可用的B类网络有16382个,每个网络能容纳6万多个主机 。 (3) C类IP地址 一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围192011-223255255254(二进制表示为: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110)。C类网络可达209万余个,每个网络能容纳254个主机。 (4) D类地址用于多点广播(Multicast)D类IP地址第一个字节以“1110”开始,它是一个专门保留的

12、地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。 地址范围224001-239255255254(5) E类IP地址 以“11110”开始,为将来使用保留。 E类地址保留,仅作实验和开发用。全零(“0000”)地址指任意网络。全“1”的IP地址(“255255255255”)是当前子网的广播地址。4.2 子网掩码简介通过 IP 地址的二进制与子网掩码的二进制进行与运算进行定某个设备的网络地址,也就是说通过子网掩码分辨一个网络的网络部分和主机部分。子网掩码一旦设置,网络地址和主机地址就固定了。相

13、对于使用子网掩码来识别网络地址,早期的使用类别进行网络地址的分类存在着地址大量浪费的不足。子网一个最显著的特征就是具有子网掩码。与IP地址相同,子网掩码的长度也是32位,也可以使用十进制的形式。例如,为二进制形式的子网掩码:11111111111111111111111100000000,采用十进制的形式为:255.255.255.0。 用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。 4.3 ip地址的计算 定义子网掩码的步骤为: (1) 确定哪些组地址归我们使用。比如我们申请到的网络号为 “210.73.a.b”,该网络地

14、址为C类IP地址,网络标识为“210.73.a”,主机标识为“.b”。 (2) 根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们现在需要12个子网,将来可能需要16个。用第三个字节的前四位确定子网掩码。前四位都置为“1”(即把第三字节的最后四位作为主机位,其实在这里有个简单的规律,非网络位的前几位置1原网络就被分为2的几次方个网络,这样原来网络就被分成了2的4次方16个子网),即第三个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。 (3) 把对应初始网络的各个位都置为“1”,即前两个字节都置为“1”,第四个字节都置为“0”,则子网

15、掩码的间断二进制形式为:“11111111.11111111.11110000.00000000” (4) 把这个数转化为间断十进制形式为:“255.255.240.0” 这个数为该网络的子网掩码。 子网掩码一共分为两类。一类是缺省子网掩码,一类是自定义子网掩码。缺省子网掩码即未划分子网,对应的网络号的位12都置1,主机号都置0。A类网络缺省子网掩码:255.0.0.0B类网络缺省子网掩码:255.255.0.0C类网络缺省子网掩码:255.255.255.0自定义子网掩码是将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:子网号、子网主机

16、号。 形式如下:未做子网划分的ip地址:网络号主机号做子网划分后的ip地址:网络号子网号子网主机号也就是说ip地址在化分子网后,以前的主机号位置的一部分给了子网号,余下的是子网主机号。子网掩码是32位二进制数,它的子网主机标误用部分为全“0”。利用子网掩码可以判断两台主机是否中同一子网中。若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。4.4 子网划分简介 子网的划分,实际上就是设计子网掩码的过程。子网掩码主要是用来区分IP地址中的网络ID和主机ID,它用来屏蔽IP地址的一部分,从IP地址中分离出网络ID和主机ID.子网掩码是由4个十进制数组成的数值

17、中间用。分隔,如255.255.255.0。若将它写成二进制的形式为:11111111.11111111.11111111.00000000,其中为1的位分离出网络ID,为0的位分离出主机ID,也就是通过将IP地址与子网掩码进行与逻辑操作,得出网络号。例如,假设IP地址为192.160.4.1,子网掩码为255.255.255.0,则网络ID为192.160.4.0,主机ID为0.0.0.1。计算机网络ID的不同,则说明他们不在同一个物理子网内,需通过路由器转发才能进行数据交换。每类地址具有默认的子网掩码:对于A类为255.0.0.0,对于B类为255.255.0.0,对于C类为255.255

18、.255.0。除了使用上述的表示方法之外,还有使用于网掩码中1的位数来表示的,在默认情况下,A类地址为8位,B类地址为16位,C类地址为24位。例如,A类的某个地址为 12.10.10.3/8,这里的最后一个8说明该地址的子网掩码为8位,而199.42.26.0/28表示网络199.42.26.0的子网掩码位数有28位。如果希望在一个网络中建立子网,就要在这个默认的于网掩码中加入一些位,它减少了用于主机地址的位数。加入到掩码中的位数决定了可以配置的于网。因而,在一个划分了子网的网络中,每个地址包含一个网络地址、一个子网位数和一个主机地址5 程序设计方法5.1 主程序设计5.1.1 设计方法实现

19、判断输出命令行中的ip是否合法,掩码是否合法以及ip_addr是否是属于子网subnet。将IP地址一位位与子网掩码做与运算,看结果是否和子网相等来判断IP地址是否属于某一个网络。在这个设计中考虑到了以上的种种情况,根据用户输入的IP地址,掩码和子网,程序可以判断输入的IP地址,掩码和子网是否正确以及ip_addr是否是属于子网subnet。5.1.2 主程序流程图YNYYYNNN开始IP是否合法Ip地址是否属于子网结束子网是否合法掩码是否合法图1IP地址合法性判断及子网判断主流程图5.2 验证ip地址合法性5.2.1 设计方法首先检查IP地址的合法性。在判断不合法IP时要考虑全面,比如以下情

20、况均属于不合法连续两个 . 12321.2含有非法字符 12323$21每部分长度超过3 123234521含有超过三个的. 1232345215.2.2 验证IP地址合法性流程图YN开始结束判断是否合法输入IP地址图2验证ip地址合法性流程图5.3 验证ip是否属于某个子网5.3.1 设计方法输入IP地址,子网掩码和子网地址接着拆分IP地址与子网掩码拆分IP地址和子网掩码进行与运算,结果与子网比较得出是否是一个网络的结论5.3.2 验证IP是否属于某个子网流程图IP和掩码与运算YN开始结束结果与子网比较拆分IP地址与子网掩码拆分ip地址和子网掩码进行与运算输入ip地址,子网掩码和子网地址图3

21、验证ip是否属于某个子网流程图6 代码#include#include#include#includeusing namespace std;int a4=0,0,0,0; /分段存放子网char Ip_addr15; /ip地址char sub_net15; /子网int ip4=0,0,0,0;int subnet4=0,0,0,0; /分段存放ip地址int address4=0,0,0,0;int num; /子网掩码int toBinary(int a)/将十进制数转换为二进制数 if(a/2=0) return a%2; return a%2+toBinary(a/2)*10;/判

22、断IP是否合法void IP_right(char c15)/判断IP地址不能超过15 if(strlen(c)15) coutendlIP地址总长度不能超过15!endl; return; int dotnum=0; /判断IP地址中是否存在非法字符 for(int i=0;istrlen(c);i+) if(isdigit(ci)=0 & ci!=.) coutendlIP地址中含有非法字符!endl; return ; if(ci=.) dotnum+; /判断IP地址中只能存在3个分隔符 if(dotnum!=3) coutendlIP地址中分隔符只能为3个!endl; return;

23、 /判断IP地址中是否存在连续分隔符 for(i=0;istrlen(c)-1;i+) if(ci=. & ci+1=.) coutendlIP地址中出现连续的分隔符!endl; return; /分割IP地址void fenge_IP(char c15) /判断IP地址中最后不能为分隔符 for(int m=0;m4;m+) ipm=0; int len; len=strlen(c); if(clen-1=.) coutendlIP地址最后们不能为分隔符!endl; return; char temp415; for(int i=0;i4;i+) for(int j=0;j15;j+) te

24、mpij=0; int j=0; i=0; for(int k=0;kstrlen(c);k+) if(ck!=.) tempij=ck; j+; else i+; j=0; for(i=0;i3) coutendlIP地址每位长度不能超过3!endl; return; switch(len) case 3: while(len!=0) ipi+=(tempilen-1-48)*pow(10,3-len); len-; break; case 2: while(len!=0) ipi+=(tempilen-1-48)*pow(10,2-len); len-; break; default: w

25、hile(len!=0) ipi+=(tempilen-1-48)*pow(10,1-len); len-; long int num=0; for(i=0;i255) coutendlIP地址数字不能超过255!endl; return; /分割网络地址void fenge_subnet(char c15) /判断网络地址中最后不能为分隔符 for(int m=0;m4;m+) subnetm=0; int len; len=strlen(c); if(clen-1=.) coutendl子网号最后不能为分隔符!endl; return; char temp415; for(int i=0;

26、i4;i+) for(int j=0;j15;j+) tempij=0; int j=0; i=0; for(int k=0;kstrlen(c);k+) if(ck!=.) tempij=ck; j+; else i+; j=0; for(i=0;i3) coutendl子网号每位长度不能超过3!endl; return; switch(len) case 3: while(len!=0) subneti+=(tempilen-1-48)*pow(10,3-len); len-; break; case 2: while(len!=0) subneti+=(tempilen-1-48)*po

27、w(10,2-len); len-; break; default: while(len!=0) subneti+=(tempilen-1-48)*pow(10,1-len); len-; long int num=0; for(i=0;i255) coutendl子网号数字长度不能超过255!endl; return; /生成子网掩码void mask() cout子网掩码为:; int r32; for(int i=0;inum;i+) ri=1; for(int j=0;j32-num;j+) ri+=0; int p=0; int w8; int k=0; for(int m=0;m4

28、;m+) int sum=0; for (int n=0;n8;n+) wp=rk; sum=sum+wp*pow(2,7-n); p+; k+; p=0; am=sum; for(int n=0;n4;n+) coutan; if(n!=3) cout.; coutendl;/判断是否和子网相等void judge() string s=; for(int i=0;i4;i+) if(ai&ipi)=subneti) s=s+a; cout由IP和子网掩码得到的网络地址:; for(i=0;i4;i+) int w1=toBinary(ai); int w2=toBinary(ipi); coutw1&w2; coutendl; /如果存在4个a cout结果:; if(s=aaaa) cout属于同一子网!endl; else cout不属于同一子网!en

温馨提示

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

评论

0/150

提交评论