版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、四四 川川 理理 工工 学学 院院课 程 设 计 书学院 计算机学院 专业 计算机科学与技术 班级 题目 IP 地址的合法性及子网判断 教师 何绍荣 学生 1说明说明本组成员:。具体分工如下:负责选题,源代码的编写,课程设计分析,以及程序测试,在课程设计的电子文档中,编写了课程设计目的,课程设计环境和要求第四点相关技术的 1 点;:负责测试程序代码,并编写本课程设计的流程图,负责课程设计的第四点相关技术说明;:负责运行出程序结果,总结,以及电子文档其他部分的制作和整个课程设计文档的排版。2目目 录录一一.课程设计目的课程设计目的.3二二.课程设计环境课程设计环境.31软件 .32硬件 .3三三
2、.课程设计要求课程设计要求.4四四.课程设计的相关技术课程设计的相关技术.41.IP 地址相关概念.42.特殊的 IP 地址形式.63.子网的划分 .74.确定子网掩码数 .7五五.课程设计分析课程设计分析.81.程序流程 .82.核心代码及说明 .9六六.课程设计流程图(如图课程设计流程图(如图 9-10).11七七.程序运行结果程序运行结果.11八八.课程设计总结课程设计总结.15九九.参考文献参考文献.16十十.附录:课程设计源代码附录:课程设计源代码.163一一. . 课程设计目的课程设计目的本设计要求编辑写程序,判断一个 ip 地址是否合法,并判断该地址是否属于一个给定子网,从而考察
3、读者是否对 ip 地址概念及其子网划分有非常清楚的认识。二二. . 课程设计环境课程设计环境1 1软件软件操作系统:Windows xp(Windows NT 以上版本皆可)编程环境:Microsoft Visual Studio 2008(兼容 MS VS2005,亦可使用VC6.0 等)编程语言:C+测试环境: MS-DOS2 2硬件硬件现阶段常见 PC三三. . 课程设计要求课程设计要求在掌握 ip 地址表示方法及子网划分方法的基础上,按如下要求完成程序。(1)命令格式:iptest subnet/mask ip_addr其中,iptest 为程序名;subnet 为子网号,mask 是
4、一个数值,代表子网掩码连续 1 的个数,ip_addr 是要测试的 ip 地址。 例如,要测试的 IP 地址为 0,子网号为 ,子网掩码为 ,则命令行为 iptest /24 0。 (因为 是连续的 24 个 1,所以用 24 表示)(2)判断 subnet 和 ip_addr 的合法性。在判断 ip 地址合法性时要自行编代码,不要使用任何 inet 函数。判断时要考虑全面, 例如以下 IP 地址均不合法:123.2.1123.23$.2.112
5、3.2345.2.14(3) 判断掩码的合法性。(4) 在 ip 地址合法的前提下,判断 ip_addr 是否属于子网 subnet。(5) 输出命令行中的 ip 是否合法,掩码是否合法(可适当给出不合法的原因) ,以及 ip_addr 是否属于子网 subnet.四四. . 课程设计的相关技术课程设计的相关技术1.IP1.IP 地址相关概念地址相关概念所谓 IP 地址就是给每个连接在 Internet 上的主机分配的一个 32bit 地址。 按照 TCP/IP(Transport Control Protocol/Internet Protocol,传输控制协议/Int
6、ernet 协议)协议规定,IP 地址用二进制来表示,每个 IP 地址长32bit,比特换算成字节,就是 4 个字节。例如:“00001010000000000000000000000001” ,这个采用二进制形式的 IP 地址是这么长的地址,人们处理起来也太费劲了。为了方便人们的使用,IP 地址经常被写成十进制的形式,中间使用符号“ ”分开不同的字节。于是,上面的 IP 地址可以表示为“10001” 。IP 地址的这种表示法叫做“点分十进制表示法”,这显然比 1 和 0 容易记忆得多。 大型的互连网络中应该有一个全局的地址系统,它能够给连接到互联网的每一台主机或者路由器分配一个唯一的全局地址
7、。TCP/IP 协议的网络层使用的地址标识符叫做 IP 地址,IPv4 中 IP 地址是一个 32 位的二进制地址。网络中的每一台主机或者路由器至少有一个 IP 地址,在 Internet 中不允许有两个设备具有相同的 IP 地址。如果一台主机或者路由器连接到两个或多个物理网络,那么它可以拥有两个或多个 IP 地址。IP 地址采用分层结构,由网络号与主机号两部分组成(如表 9-01 所示):表 9-01网络号主机号IP 地址长度为 32 位,用点分十进制表示,格式为.,每个为8 位,每个的值为 0255(例如 19)。根据不同的取值范围,5IP 地址可以分为五类,IP
8、地址中的前 5 位用于标识 IP 地址的类别,具体的分类规则如下:A 类地址的第一位为 0。B 类地址的前两位为 10 .C 类地址的前三位为 110。D 类地址的前四位为 1110。E 类地址的前五位为 11110。五类 IP 地址的结构如下表所示(如表 9-02 所示);表 9-020网络号(7 位)主机号(24 位)10网络号(14 位)主机号(16 位)110网络号(21 位)主机号(8 位)1110组播地址(28 位)11110保留用于课程设计和将来使用A 类 IP 地址结构适合用于有大量主机的大型网络。由于主机号长度为 24位,因此每个 A 类网络的主机 IP 数理论上为 224=
9、16777216。B 类 IP 地址适合用于一些国际性大公司与政府机构等中等大小的组织。由于网络 IP 长度为 14 位,因此允许有 214=16384 个不同的 B 类网络,实际允许连接 16382 个网络。C 类 IP 地址适合用于一些小公司与普通的研究机构。2.2.特殊的特殊的 IPIP 地址形式地址形式(1)直接广播地址A 类,B 类,C 类 IP 地址中主机号全 1 的地址称为直接广播地址,用来使路由器将一个分组以广播方式发送给特定网络上的所有主机。直接广播地址只能作为分组中的目的地址。物理网络采用的是点点传输方式,分组广播需要通过软件来实现(如表 9-03 所示)。表 9-03网络
10、号主机号全 1(2)受限广播地址6网络号与主机号的 32 位全位 1 的地址为受限广播地址,用来将一个分组以广播方式发送给本网的所有主机。本网的所有主机将接受该分组,路由器则阻挡该分组通过(如表 9-04 所示)。表 9-04全 1(3)“这个网络上的这台主机”地址(如表 9-05 所示)。表 9-05全 0(4)“这个网络上的特定主机”地址主机或路由器向本网络上的某个特定的主机发送分组,网络号部分为全0,主机号为确定的值。这样的分组被相知在本网络内部(如表 9-06 所示)。表 9-06网络号全 0主机号(5)回送地址回送地址用于网络软件测试和本地进程见通信。TCP/IP 协议规定网络号为1
11、27 的分组不能出现在任何网络上;主机和路由器不能为该地址广播任何寻址信息(如表 9-07 所示)。表 9-07127任意值(通常取 1)3.3.子网的划分子网的划分人们在早期设计与建设 ARPAnet 是,没有预料到网络的发展速度如此之快,应用范围如此之广。当时个人计算机与局域网尚未出现。所以,研究者在设计Internet 地址的编址方案时,主要是针对大型互联的网络结构。设计 IP 地址的最初目的是希望每个 IP 得志都能唯一地、确定地识别一个网络与一台主机,但是这种方法同时也存在着两个主要的问题,即 IP 地址的有效利用率和路由器的工作效率。为了解决这个问题,人们提出了子网(subnet)
12、和超网(supernet)的概7念。子网就是一个大的网络划分成几个较小的网络,而每一个小网络都是其自己的地址。超网就是将一个组织所属的几个 C 类网络合并成为一个更大地址范围的逻辑网络。划分子网实际上就是在 IP 地址系统中增加一个层次。三级 IP 地址的表示方法为 netID-subnet ID-host ID。第一级网络号定义了网点的位置;第二级子网号定义了物理子网;第三级主机号定义了主机和路由器到物理网络的连接。三级层次的 IP 地址,一个 IP 分组的路由器的过程分为三步:第一步将分组转发给网点,第二步转发给物理子网,第三步转发给确切的主机。当三级层次的 IP 地址提出后,一个很显示的
13、问题是:如何从一个 IP 地址提取出子网号。因此,提出了子网掩码(subnet mask)的概念。子网掩码有时也叫做子网掩码。子网掩码表示方法:网络号与子网号置 1,主机号置 0。如判断某一 IP 地址是否属于某一子网呢?只需将二进制 IP 地址与子网掩码按位进行“与”运算。若“与”运算所得值与给定子网地址一致,则说明该 IP 地址属于给定的子网。4.4.确定子网掩码数确定子网掩码数用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。 定义子网掩码的步骤为: A、确定哪些组地址归我们使用。比如我们申请到的网络号为 “128.73.
14、a.b” ,该网络地址为 B 类 IP 地址,网络标识为“128.73” ,主机标识为“a.b” 。 B、根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们现在需要 12 个子网,将来可能需要 16 个。用第三个字节的前四位确定子网掩码。前四位都置为“1” ,即第三个字节为“11110000” ,这个数我们暂且称作新的二进制子网掩码。 C、把对应初始网络的各个位都置为“1” ,即前两个字节都置为“1” ,第四个字节都置为“0” ,则子网掩码的间断二进制形式为:“11111111.11111111.11110000.00000000” 8D、把这个数转化
15、为间断十进制形式为:“” 这个数为该网络的子网掩码。五五. . 课程设计分析课程设计分析1.1.程序流程程序流程(1) 分别判断子网号、掩码和 IP 地址的基本格式是否合法。(2) 如果三者的基本格式都合法,才调用判定“IP 地址是否为子网成员”的函数。该函数同时判别子网号与掩码是否匹配,子网号为全 0 或全 1,主机号为全 0、全 1。 (流程如表 9-08)表 9-082.2.核心代码及说明核心代码及说明(1) 判断 IP 地址是否合法。一般来说,我们先检查最明显的错误,例如,可以先判断 IP 中“.”的个数是否正确;接着,以“.”为标志看、将 IP 字符串按节分
16、开;然后,看该 IP是否为 4 段,再判断各节是否是 0255 间的整数。关于网络号、主机号全 0 全1 等问题要在后面结合子网掩码一起判断。这里的关键是怎么将 IP 字符串以“.”为标志按节分开,这要用到函数strtok(char * strToken,const char * strDelimit)。第一个参数是给定的串,第二个参数是分隔符集合,该函数的功能就是以 strDelimit 中包含的任意字符为分隔符,在 strToken 中寻找下一个 token。每一次调用 strtok 后,都会在strToken 中插入一个 NULL 字符,所以,如果要读取下一个 token,接下来用str
17、tok 时第一个参数用 NULL。制定规则设计数据结构算法实现调试 测试数据分析9Char ch=”.”; /分隔符Char *token,*dot4;Int iplen=0;Token=strtok(ip,ch);While(token!=NULL)Dotiplen=token;Iplen+;Token=strtok(NULL,ch);这样,IP 串的每一段都防盗 dot 数组里了,下面判断是否有非法字符,每一段的值是否在 0255 之间,就很容易了。(2) 判断 IP 地址是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全 0、全 1 问题(iSubA 是子网号,iMask 是
18、掩码,iIPA 是给定的IP 地址) 。If(iiSubA|iMask)!= iMask) /说明 sub 与 mask 不匹配 cout 子网号与掩码不匹配,error!endl;return;if( ( iSubA iMask ) = 0 ) /说明子网号全 1cout 子网号全 1,error!endl;return;if( ( iSubA & iMask ) = 0 ) /说明子网号全 0cout 子网号全 0,error!endl;return;if( ( iSubA) = (iIPA & iMask) ) /IP 和掩码与,结果和子网号比较if( ( iIPA |
19、iMask) = iMask ) 10/说明主机号全 0cout 主机号全 0,error!endl;return;if( ( iIPA | iMask ) = 0 xffffffff ) /说明主机号全 1cout 主机号全 1,error!endl;return;/ip 属于 subnetcout ip belongs to subnetPlusMaskendl;return;/ip 不属于 subnetelsecout ip doesnt belong to subnetPlusMaskendl;六六. . 课程设计流程图(如图课程设计流程图(如图 9-109-10)七七. . 程序运行
20、结果程序运行结果 本部分测试了正常输入和非法输入时,程序对输入的判断,编程的环境为VS2008,在解决方案文件夹下面的 Debug 文件夹里面生成可执行文件;运行MS-DOS,进入 Debug 文件夹进行测试。其中,实验截图中的 subnet 是子网号, mask 是子网掩码连续为 1 的位数,ip 是给定的 IP 地址。(1)在命令提示窗口中输入命令:iptest /24 0结果如图 9-01 所示: 11图 9-01这个结果表示所输入的子网及 ip 地址是合法的(2)判断 ip 地址无效在命令提示窗口中输入命令:iptest 202.113.
21、16.0/24 %结果如图 9-02 所示:图图 9-02该结果表示所输入 ip 地址无效,因为 ip 地址中有无效字符“%” 。在命令提示窗口中输入命令:iptest /24 0.10结果如图 9-03 所示:图图 9-03由命令可以很明显的看出 ip 地址过长,说明该程序算法正确。(3)判断掩码的有效性在命令提示窗口中输入命令:iptest /2a 0结果如图 9-04 所示: 图图 9-04很显然,掩码中含有“a” ,不合法。在命令提示窗口中输入命令:iptest 20
22、/33 0结果如图 9-05 所示:12图 9-05因掩码不能长于 32 位,上提示掩码无效进一步说明该算法的正确性。(4)判断 ip 地址是否属于该子网在(1)中是该 ip 地址属于该子网的情况在命令提示窗口中输入命令:iptest /24 0,显然该 ip 地址不属于该子网。结果如图 9-06 所示: 图 9-06该结果符合我们的预想。 (5)提示子网号全 0 或全 1在命令提示窗口中输入命令:iptest /24 0结果如图 9-07 所示:图 9-07在命令
23、提示窗口中输入命令:iptest /24 0结果如图 9-08 所示:图 9-08(6)判断主机号全 0 或全 113在命令提示窗口中输入命令:iptest /24 结果如图 9-09 所示:图 9-0914NY YY YY NY NY YY NY YY NY 读取一个字符串是否都是数 字字符return段数=4? 每段的值是否大于 255ipIsValid(subnet)是否为真Ip&Mask=subnetMask 是否在(0,32)范围内 子网号与掩码不匹配 程序结束 输出”掩码非法”
24、调用 ipIsValid 函数输出”ip 地址非法”输出”子网非法”YY NY 程序开始,变量初始化15 图图 9-109-1016在命令提示窗口中输入命令:iptest /24 55结果如图 9-11 所示:图 9-11以上现象充分说明该算法是完全正确的。八八. . 课程设计总结课程设计总结三天的课程设计就这样结束了,在这个过程中,我们遇到了各种意想不到的问题,尝遍了酸甜苦辣,既享受了成功的欢欣,又品尝了失败的懊恼,总之,一路上磕磕跘跘,甚是艰辛。当我们选择了 “IP 地址的合法性及子网判断”这个题目后,觉得它应该比较简单!但是,当我们大伙坐下
25、来仔细分析题目时,发现这并没有我们当初想的那么简单。首先,在考虑 IP 地址非法的情况时,我们就漏掉了判断 ip 地址是否是子网成员的几种情况。最后,当我们输入命令行进行运行时,却发现不管我们输入的子网地址是否合法,运行结果都显示如图 9-12 所示:http:/ 图 9-12我们分析了很久也找不到原因,无奈我们再一次寻求老师的帮助。他只是把整个程序大致浏览了一下就得出没有错误,是环境方面的问题。于是,在他的指导下,我们将程序在 c+中编译并解释后,在 MS-DOS 下运行,最终得出了结果,准确无误。这才把课程设计的核心编写源代码搞定http:/平常我们都只顾对理论的学习,而没花时间进行实践,
26、课程设计为我们提供了一个把理论知识进行实践的绝好机会,课程设计要求我们既动手有动脑,17即要独立思考又要团队配合,锻炼我们的分析实际问题,解决实际问题的能力,提高我们适应实际,实践的能力。一言以蔽之,我们既要强调对理论知识的学习,又要注重实践,在实践过程中加强对理论知识的理解,使实践与理论学习形成良性循环。最后,真诚地感谢老师的指导。九九. . 参考文献参考文献1谢希仁。计算机网络第 5 版。电子工业出版社,2008,1。2吴功宜,胡晓英,张仁,何云。计算机网络课程设计。机械工业出版社,2005,9。十十. . 附录:课程设计源代码附录:课程设计源代码#include #include #in
27、clude #include #include #include #include #include #include #include #pragma comment(lib,ws2_32.lib)/类结构class ipTestpublic:char ip15;char subnetPlusMask18;char subnet18;char TempIp15;bool maskIsValid;int mask;char Tempsub18; ipTest(char *,char *);18ipTest();bool NoIllegalChar(char *); /非法字符的判断bool i
28、pIsValid(char *); /判断 IP 地址是否合法bool subnetIsValid(char *); /判断子网号是否合法void belong(); /判断 IP 是否为子网成员print(); /主函数void main(int argc,char * argv)if(argc!=3) /判断参数格式化是否正确couterrorendlformat shoud be:ip_test subnet/mask ip18) /先判断最简单的错误,长度是否超出cout15)coutip is too long;return;ipTest test(argv1,argv2); /实例
29、话 ipTest 类test.print(); /完成相应判别并输出结果/构造函数ipTest:ipTest( char* subnetPlusMask, char *ip)19maskIsValid=true;char temp2;/把/前的字符复制到 subnet 字符数组中int smLen=strlen(subnetPlusMask);for( int i=0; isubneti=subnetPlusMaski;this-Tempsubi=subnetPlusMaski;subneti=0;Tempsubi=0;if(i=smLen-2) /初始化 mask 和 maskIsVslid
30、if(i=smLen-2)temp0=subnetPlusMaski+1;if( !isdigit(temp0) )maskIsValid = false;else if( i = smLen-3 ) temp0=subnetPlusMaski+1;temp1=subnetPlusMaski+2;if( !(isdigit(temp0)&isdigit(temp1) )maskIsValid=false;mask = atoi(temp);if( mask 32)maskIsValid = false;elsemaskIsValid=false;strcpy( this-subnetP
31、lusMask, subnetPlusMask);strcpy( this-ip, ip );strcpy( this-TempIp, ip );/调用判别函数,并输出结果ipTest:print()bool subIsV=subnetIsValid(Tempsub);bool ipIsV=ipIsValid(TempIp);if(!subIsV)20coutsubnet is invalid ! endl;elsecoutvalid subnet: subnetendl;if(!maskIsValid)coutmask is invalid!endl;elsecoutvalid mask:m
32、askendl;if(!ipIsV)coutip is invalid!endl;elsecoutvalid ip:ipendl;/判断 IP 是否 belong subnetif(subIsV&ipIsV&maskIsValid)belong();/子函数,判断输入是否含有非数字字符bool ipTest:NoIllegalChar(char *ch)unsigned int i,k=0;for(i=0;istrlen(ch);i+)if(isdigit(*(ch+i)=0)return false;return true;/判别 IP 地址是否合法bool ipTest:i
33、pIsValid(char * ip)char ch= .; char *token,*dot4;int iplen=0;token=strtok(ip,ch); /以.标志将 IP 字符串按节分开while(token!=NULL) /循环进行,知道结束dotiplen=token; /将分开的每段赋值给 dotiplen+;token= strtok(NULL,ch);21if(iplen!=4)coutTempsubendl;return false; /段数不对for(int i=0;i255) /有非法字符或某段值非法return false;return true;/判断子网号是否合法bool ipTest:subnetIsValid(char* subnet)if( ! ipIsValid(subnet) /调用判别 IP 地址合法性的函数return false;return true;/判断 IP 是否为子网成员,判断子网号与掩码是否匹配以及子网号、主机号全0 全 1 问题void ipTest:belong()int subLen=strlen
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 唤醒护理的培训与教育
- 大丰市小海中学高二生物三同步课程讲义第讲生态系统的信息传递
- 2025年办公自动化设备租赁合同(公司)
- 《PCB 电路板智能化专用设备运维技术规范》标准征求意见稿
- 大数据驱动的风险管理模型
- 鼻窦炎患者的心理护理
- 金融系统对抗攻击的防御策略
- 土地整治优化
- 房颤冷冻消融治疗与及进展
- 2026 年中职康复治疗技术(关节松动训练)试题及答案
- 投资者关系管理
- 学堂在线 临床中成药应用 章节测试答案
- 物流协会管理办法
- 跑步健康课件图片
- 医用耗材管理办法原文
- 传承红色基因铸就党纪之魂建党104周年七一党课
- 诗词大会抢答题库及答案
- 立式油罐知识培训课件
- 口腔健康科普指南
- 2025年《智能客户服务实务》课程标准
- 公司便民雨伞管理制度
评论
0/150
提交评论