1、编程判断ip地址的合法性XXXXXX大学XXXXXXX学院计算机网络与通信实习报告 设 计 题 目 编程判断IP地址的合法性 学生专业班级 学生姓名(学号) 指 导 教 师 完 成 时 间 2010-5-22 实 习(设计)地点 信息楼139、112 2010年 5月 22日一实习题目编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号。二原理概述 在计算机网络中,主要分为三类IP地址,即A类,B类,C类地址,每一类地址都有其特点和寻址原则。每个IP地址均有32位,8个为一段,共四个字节。每段范围在0255,超出这个范围就是错误的。子网掩码是一个32位地址,用于屏蔽IP地址的一部分
2、以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。子网掩码的计算根据其具体算法来计算。 1三类地址的特点:11 A类IP地址 0网络号(7位)主机号(24位)一个A类IP地址是指,在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为7位,主机标识的长度为24位,A类网络地址数量较少,可以用于主机数达1600多万台的大型网络。 12B类IP地址10网络号(14位)主机号(16位)一个B类IP地址是指,在I
3、P地址的四段号码中,前两段号码为网络号码,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为14位,主机标识的长度为16位,B类网络地址适用于中等规模规模的网络,每个网络所能容纳的计算机数为6万多台。 13C类IP地址 110网络号(21位)主机号(8位)一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为21位,主机标识的长度为8位
4、,C类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含254台计算机。 2IP的寻址规则 :21网络寻址规则 网络地址必须唯一。 网络标识不能以数字127开头。在A类地址中,数字127保留给内部回送函数。 网络标识的第一个字节不能为255。数字255作为广播地址。 网络标识的第一个字节不能为“0”,“0”表示该地址是本地主机,不能传送。 22主机寻址规则 主机标识在同一网络内必须是唯一的。 主机标识的各个位不能都为“1”,如果所有位都为“1”,则该机地址是广播地址,而非主机的地址。 主机标识的各个位不能都为“0”,如果各个位都为“0”,则表示“只有这个网络”,而这个网络上没有任何
5、主机。 3IP子网掩码概述 31 子网掩码的概念 子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。 32 确定子网掩码数 用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。 定义子网掩码的步骤为: 确定哪些组地址归我们使用。比如我们申请到的网络号为 “210.73.a.b”,该网络地址为c类IP地址,网络标识为“210.73”,主机标识为“a.b”。 根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们现在需要12个
6、子网,将来可能需要16个。用第三个字节的前四位确定子网掩码。前四位都置为“1”,即第三个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。 把对应初始网络的各个位都置为“1”,即前两个字节都置为“1”,第四个字节都置为“0”,则子网掩码的间断二进制形式为:“11111111.11111111.11110000.00000000” 把这个数转化为间断十进制形式为:“255.255.240.0” 三设计方案1实验开发环境Microsoft Visual C+6.0来实现这个系统。2 系统分析及函数说明 为了避免使系统使用过多重复的代码以及增加程序的可读性我们可以定义一个类结构ipT
7、est;输入的字符串需要判断是否是只是数字而不是其他的不合法字符我们就需要定义一个NoIllegalChar()来判断其输入的串是否是字符;要判断IP地址及子网号是否合法我们就需要设计一个函数来判断IP地址及子网号是否正确的函数我们设函数分别为ipIsValid()和subnetIsValid();判断Ip是否属于该子网号我们用函数belong();最后我们需要输出结果我们就使用print()来实现又好的输出。其详细的函数及功能如下: NoIllegalChar(char *):判断包括是否有非法字符、段值是否为四 ipIsValid(char *):判断IP地址是否合法也包括非法字符、段值的
8、判断 subnetIsValid(char *):判断子网号是否合法也包括非法字符、段值的判断 belong():判断IP是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全0全1问题 print():定义输出函数print。3程序流程图 a、主流程图 b、验证ip地址合法性流程图 c、验证子网掩码合法性流程图 四程序编写1判断IP地址是否合法#include #include int main() char str31,temp31; /定义IP地址为32位的字符类型 int a,b,c,d; /定义IP地址的四个字节为a,b,c,d,并且均为整型的Printf(“请输入IP地址”
9、) while(gets(str) != NULL) if(scanf(str,%d.%d.%d.%d,&a,&b,&c,&d)=4 & a=0 & a=0 & b=0 & c=0 & d=255) /IP地址每个字节的范围限制 printf(temp,%d.%d.%d.%d,a,b,c,d); if(strcmp(temp,str)=0) printf(IP地址合法n); else printf(IP地址不合法n); else printf(IP地址不合法n); return 0; 2判断IP是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全0全1问题 if(!ipIsValid
10、(subnet) /调用判别IP地址合法性的函数 return false; return true;for (i = 0, j= 0;i subLen;i+) /不用再检错 if(subneti !=.) tempj+=subneti; /temp数组中放.间的串 else subA3-t = atoi(temp); /subA数组中放.间的数据 j=0; t+; temp0=temp1=temp2=0; subA0=atoi(temp); temp0=temp1=temp2=0; iSubA=*(unsigned int *)subA; /iSubA中放subnet中.除外的串对应的数 f
11、or(i=0,j=0,t=0;i ipLen;i+) /不用再检错 if(ipi!=.) tempj+=ipi; else ipA3-t=atoi(temp); j=0; t+; temp0=temp1=temp2=0; ipA0=atoi(temp); iIPA=*(unsigned int*)ipA; /iIPA中放IP中.除外的串对应的数 iMask = 0xffffffff; iMask =(32-mask); /获得掩码 if(iSubA | iMask)!= iMask) /说明sub与mask不匹配 if(iSubAiMask)=0) /说明子网号全1 if(iSubA&iMas
12、k)=0) /说明子网号全0 if(iSubA)=(iIPA&iMask) /IP和掩码与,结果和子网号比较 if(iIPA|iMask)=iMask) /说明主机号全0 if(iIPA|iMask)=0xffffffff) /说明主机号全1 /ip属于subnet /ip不属于subnet else cout ip 不属于 subnetPlusMask endl; 五运行结果1.测试Ip地址是否合法如图分析:IP地址不符合格式要求!分析:子网号出现了“$”字符,其为非法字符,所以出错!分析:子网号的段数不是四,所以出错!分析:IP地址段数不是四,所以出错!2.简单判断子网号及掩码长度是否超出
13、范围如图分析:因为程序里设置的子网号和掩码字符串长度最多是18个字符而这里有20个字符大于18,所以出错!分析:程序中的IP地址字符串最长只有15个而程序中有17个字符大于15个,所以出错!3.测试子网号与掩码是否匹配如图分析:子网号转换为二进制:00000000 11000000 00000000 00000000 子网掩码转换成二进制:11111111 10000000 00000000 00000000从以上可以看出子网号与子网掩码不匹配与输出结果是一样的说明程序算法是正确的!分析:子网号转换为二进制:00000000 10000000 00000000 00000000 子网掩码转换成
14、二进制:11111111 10000000 00000000 00000000从以上可以看出子网号与子网掩码匹配与输出结果是一样的说明程序算法是正确的!六实习心得与体会 历经一周的时间,通过对该课程的设计,使我对IP地址的形成及合法性有深层次的理解。对子网判断有个清晰的认识;即计算机网络的IP地址主要分为三类,A,B,C三类。一个主机号由网络号和主机号两大部分组成,子网号是在主机号中抽出几位来作为子网号的。相同的子网掩码可以有不同的网络地址。此次课程设计让我能够将所学知识融会贯通、进一步系统化,进一步提高软件设计的能力,为以后的更高一级的软件设计打下坚实基础。在课程设计的最初阶段我遇到了一些问
15、题,比如我不确定用哪一种语言编写试验程序更简洁明了,在充分比较了VB和C语言后,我发现对C语言的掌握程度远比VB要好,而且C语言的语句比较简洁,符合编程的一般常理,最终我决定用C语言进行整个的编程。确定好实验开发环境之后,我开始着手实验题目的分析与实验原理相关知识的储备,通过查阅计算机网络课本及网上资源的利用,初步掌握了IP地址及子网掩码的相关概念。接下来我开始复习C语言的一些编程语句及编程技巧,根据实验的要求着手编写试验程序。在程序的调试过程中遇到的问题是最多的,比如类型不匹配,某一个变量没有定义等,但在错误提示下,逐一进行改错。然后将运行结果进行截图。最后在课程设计的要求下写实习报告。在整个实习的过程中,我体会到了编程的严谨性,对我的分析能力有很大的提高,这将对我今后的学习有莫大的帮助!参考文献:1、计算机网络(第五版) 谢希仁 电子工业出版社 2008年10月版2、C程序设计(第三版)谭浩强 清华大学出版社 2005年7月版3、网络编程与开发技术 殷肖川、刘志宏、姬伟峰、万映辉 西安交通大学出版社 2003年9月版课程设计成绩评定表学生姓名专业班级设计题目编程判断IP地址的合法性指导教师评语及意见:指导教师评阅成绩: 指导教师签字: 年 月 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1