【2017年整理】编程判断IP地址的合法性

上传人:豆浆 文档编号:997139 上传时间:2017-05-25 格式:DOC 页数:12 大小:158KB
返回 下载 相关 举报
【2017年整理】编程判断IP地址的合法性_第1页
第1页 / 共12页
【2017年整理】编程判断IP地址的合法性_第2页
第2页 / 共12页
【2017年整理】编程判断IP地址的合法性_第3页
第3页 / 共12页
【2017年整理】编程判断IP地址的合法性_第4页
第4页 / 共12页
【2017年整理】编程判断IP地址的合法性_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《【2017年整理】编程判断IP地址的合法性》由会员分享,可在线阅读,更多相关《【2017年整理】编程判断IP地址的合法性(12页珍藏版)》请在金锄头文库上搜索。

1、1XXXXXX 大学XXXXXXX 学院计算机网络与通信实习报告 设 计 题 目 编程判断 IP 地址的合法性 学生专业班级 学生姓名(学号) 指 导 教 师 完 成 时 间 2010-5-22 实 习(设计)地点 信息楼 139、112 2010 年 5 月 22 日2一实习题目编写一个判断 IP 地址是否合法的计算机程序,如果合法,给出其子网号。二原理概述在计算机网络中,主要分为三类 IP 地址,即 A 类,B 类,C 类地址,每一类地址都有其特点和寻址原则。每个 IP 地址均有 32 位,8 个为一段,共四个字节。每段范围在 0255,超出这个范围就是错误的。子网掩码是一个 32 位地址

2、,用于屏蔽 IP地址的一部分以区别网络标识和主机标识,并说明该 IP 地址是在局域网上,还是在远程网上。子网掩码的计算根据其具体算法来计算。 1三类地址的特点:11 A 类 IP 地址 0 网络号(7 位) 主机号(24 位)一个 A 类 IP 地址是指,在 IP 地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示 IP 地址的话,A 类 IP 地址就由1 字节的网络地址和 3 字节主机地址组成,网络地址的最高位必须是“0” 。A 类 IP 地址中网络的标识长度为 7 位,主机标识的长度为 24 位,A 类网络地址数量较少,可以用于主机数达 1600 多

3、万台的大型网络。 12 B 类 IP 地址10 网络号(14 位) 主机号(16 位)一个 B 类 IP 地址是指,在 IP 地址的四段号码中,前两段号码为网络号码,B类 IP 地址就由 2 字节的网络地址和 2 字节主机地址组成,网络地址的最高位必须是“10”。B 类 IP 地址中网络的标识长度为 14 位,主机标识的长度为 16 位,B 类网络地址适用于中等规模规模的网络,每个网络所能容纳的计算机数为 6 万多台。 13 C 类 IP 地址 110 网络号(21 位) 主机号(8 位)一个 C 类 IP 地址是指,在 IP 地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机

4、的号码。如果用二进制表示 IP 地址的话,C 类 IP 地址就由 3 字节的网络地址和 1 字节主机地址组成,网络地址的最高位必须是 “110”。C 类IP 地址中网络的标识长度为 21 位,主机标识的长度为 8 位,C 类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含 254 台计算机。 2IP 的寻址规则 :21 网络寻址规则 网络地址必须唯一。 网络标识不能以数字 127 开头。在 A 类地址中,数字 127 保留给内部回送函数。 网络标识的第一个字节不能为 255。数字 255 作为广播地址。 网络标识的第一个字节不能为“0”,“0”表示该地址是本地主机,不能传送。 3

5、22 主机寻址规则 主机标识在同一网络内必须是唯一的。 主机标识的各个位不能都为“1”,如果所有位都为“1”,则该机地址是广播地址,而非主机的地址。 主机标识的各个位不能都为“0”,如果各个位都为“0”,则表示“只有这个网络”,而这个网络上没有任何主机。 3IP 子网掩码概述 31 子网掩码的概念 子网掩码是一个 32 位地址,用于屏蔽 IP 地址的一部分以区别网络标识和主机标识,并说明该 IP 地址是在局域网上,还是在远程网上。 32 确定子网掩码数 用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。 定义子网掩码的步骤为:

6、确定哪些组地址归我们使用。比如我们申请到的网络号为 “210.73.a.b”,该网络地址为 c 类 IP 地址,网络标识为“210.73” ,主机标识为 “a.b”。 根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们现在需要 12 个子网,将来可能需要 16 个。用第三个字节的前四位确定子网掩码。前四位都置为“1”,即第三个字节为 “11110000”,这个数我们暂且称作新的二进制子网掩码。 把对应初始网络的各个位都置为“1”,即前两个字节都置为 “1”,第四个字节都置为“0”,则子网掩码的间断二进制形式为:“11111111.11111111.11

7、110000.00000000” 把这个数转化为间断十进制形式为:“255.255.240.0” 三设计方案1实验开发环境Microsoft Visual C+6.0 来实现这个系统。2 系统分析及函数说明为了避免使系统使用过多重复的代码以及增加程序的可读性我们可以定义一个类结构 ipTest;输入的字符串需要判断是否是只是数字而不是其他的不合法字符我们就需要定义一个 NoIllegalChar()来判断其输入的串是否是字符;要判断 IP 地址及子网号是否合法我们就需要设计一个函数来判断 IP 地址及子网号是否正确的函数我们设函数分别为 ipIsValid()和 subnetIsValid()

8、;判断 Ip 是否属于该子网号我们用函数 belong();最后我们需要输出结果我们就使用 print()来实现又好的输出。其详细的函数及功能如下:4NoIllegalChar(char *):判断包括是否有非法字符、段值是否为四ipIsValid(char *):判断 IP 地址是否合法也包括非法字符、段值的判断subnetIsValid(char *):判断子网号是否合法也包括非法字符、段值的判断belong():判断 IP 是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全 0 全 1 问题print():定义输出函数 print。3程序流程图a、主流程图YNYYYNNN开始

9、子网是否合法Ip 地址是否属于子网结束掩码是否合法Ip 地址是否合法b、验证 ip 地址合法性流程图5YN开始结束用正则表达式判断是否合法输入的 Ip 地址c、验证子网掩码合法性流程图YN开始结束用正则表达式判断是否合法输入子网掩码四程序编写1判断 IP 地址是否合法#include #include int main() char str31,temp31; /定义 IP 地址为 32 位的字符类型int a,b,c,d; /定义 IP 地址的四个字节为 a,b,c,d,并且均为整型的6Printf(“请输入 IP 地址”)while(gets(str) != NULL) if(scanf(

10、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(subnet) /调用判别 IP 地址合法性的函

11、数 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; 7 subA0=atoi(temp); temp0=temp1=temp2=0; iSubA=*(unsigned int *)subA; /iSubA 中放 subnet 中.除外的串对应的数 for(i=0,j=0,t=0;i

12、 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&iMask)=0) /说

13、明子网号全 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; 8五运行结果1.测试 Ip 地址是否合法如图分析:IP 地址不符合格式要求!分析:子网号出现了“$”字符,其为非法字符,所以出错!分析:子网号的段数不是四,所以出错!分析:IP 地址段数不是四,所以出错!2.简单判断子网号及掩码长

14、度是否超出范围如图分析:因为程序里设置的子网号和掩码字符串长度最多是 18 个字符而这里有 20 个字符大于 18,所以出错!9分析:程序中的 IP 地址字符串最长只有 15 个而程序中有 17 个字符大于 15 个,所以出错!3.测试子网号与掩码是否匹配如图分析:子网号转换为二进制:00000000 11000000 00000000 00000000子网掩码转换成二进制:11111111 10000000 00000000 00000000从以上可以看出子网号与子网掩码不匹配与输出结果是一样的说明程序算法是正确的!分析:子网号转换为二进制:00000000 10000000 00000000 00000000子网掩码转换成二进制:11111111 10000000 00000000 00000000从以上可以看出子网号与子网掩码匹配与输出结果是一样的说明程序算法是正确的!六实习心得与体会历经一周的时间,通过对该课程的设计,使我对 IP 地址的形成及合法性有深层次的理解。对子网判断有个清晰的认识;即计算机网络的 IP 地址主要分为三类,A,B,C三类。一个主机号由网络号和主机号两大部分组成,子网号是在主机号中抽出几位来作为子网号的。相同的子

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号