IP地址的合法性及子网判断计算机网络系统设计书
第一章 概述
1.1课程设计目的
本设计要求编写程序,判断一个IP地址是否合法,并判断该地址是否是属于一个给定的子网。从而考察读者是否对IP地址概念及子网划分有非常清楚的认识。
1.2 课程设计的要求
在掌握IP 地址的表示方法及指望划分方法的基础上,按如下要求完成程序。 1) 命令行格式:ip_test subnet/mask ip_addr
其中,ip_test为程序名;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表示。)
2) 判断subnet和ip_addr的合法性。
在判断IP地址的合法性是要自行编写代码,不要用任何的inet函数。
判断是要考虑全面,比如以下IP 的地址的合法性: 123..2.1 123.23¥.2.1 123.23.45.2.1 3) 判断掩码的合法性。
4) 在IP地址合法的前提下,判断ip_addr是否属于子网subnet。 5) 输入命令行中的ip是否合法,掩码是否合法(可适当给出不合法原因)
以及ip_addr是否属于子网subnet。
第二章 具体设计
2.1设计思路
根据以上的要求,并结合当前的所学的一些知识和技术,我们最终通过另一种方式来实现相同的功能,但代码更加优化,高效,方便用户的窗体程序。 对于以上的要求,设计思路如下:
1. 程序大致流程
1) 分别判断子网号,掩码和ip地址的基本格式的合法性。 2) 如果三者的基本格式都合法,才调用判定“IP地址是否为子网成
员”的函数。该函数同时判别子网号和掩码是否匹配,子网号为全0或全1,主机号为全0、全1。
2. 核心代码及说明
判断ip地址是否合法,才调用判定“IP地址是否为子网成员”的函数。该函数同时判断子网号与掩码是否匹配,子网号为全0或全1,主机号为全0、全1. 3. 核心代码及说明
1) 判断IP地址是否合法。
一般来说,我们先检查最明显的错误。例如,可以先判断IP中“.”
的个数是否正确;接着,以“.”为标志将IP字符串按节分开;然后,看该IP是否为4段,再判断各节是否是0~255间的整数。关于网络号、主机号全0全1等问题要在后面结合子网掩码一起判断。
这里德关键是怎么样将IP字符串以“.”为标志按节分开,这要用到函数strtok(char * strToken,const char * strDelimit)。第一个参数是给定的串,第二个参数是分隔符集合,该函数的功能就是以strDelimit中包含的任意字符为分隔符,在strToken中寻找下一个token。每一次调用strtok后,都会在strToken中插入一个NULL字符,所以,如果要读取下一个stoken,接下来调用strtok时第一个参数用NULL。
这样,IP串的每一段都放到dot数组里了,下面判断是否有非法字符,每一段的值是否在0~255之间,就很容易了。
2) 判断IP地址是否为子网成员,判断子网号与掩码是否匹配,以及
子网号、主机号全0、全1的问题
2.2流程图如下:
当用户启动程序后(如图2.1),在输入框中输入IP、子网、子网掩码,然后点击测试,验证其合法性。在此过程中调用子程序isLegal(如图2.2)在子程序中判断输入的IP地址是否合法(其中包括:1.判断输入的IP长度是否合法;2.判断输入的IP是否含有非法字符;3.判断输入的IP格式是否正确;4.判断输入的IP是否已转化为Ipaddress的实例)。跳回到主程序中继续执行,如果IP、子网、子网掩码都合法,调用子程序subChecked(如图2.3),在子程序中完成判断子网号和子网掩码是否匹配,如果匹配则进一步判读子网号是否为全0或全1,否则输出子网号和子网掩码不匹
配提示。接下来,如果子网号不为全0或全1则将IP和掩码做“与”运算,结果和子网号比较,否则输出子网号为全0或全1提示。再接下来,判断比较结果(IP和掩码做“与”运算的结果和子网号的比较结果)是否相等,如果相等则判断主机号是否为全0或全1,如果不相等则输出“IP不属于该子网”。最后,如果主机号为全0或全1则输出主机号为全0或全1提示,如果主机号不为全0或全1则输出“IP属于该子网”。
子程序执行完后返回主程序中继续执行,然后完成ip地址是否属于给定子网的判定