判断IP地址是否合法3.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
判断IP地址是否合法3

XXXXXXXX大学 XXXXXXX学院 计算机网络与通信实习报告 设 计 题 目 学生专业班级 学生姓名(学号) 指 导 教 师 完 成 时 间 实 习(设计)地点 信息楼139、112 2010年 5月 22日 一、实习题目 编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号。 二、原理概述 大型的互联网络中应该有一个全局的网络系统,它能过给互联到互联网的每一台路由器分配一个全局唯一的地址。TCP/IP协议的网络层使用的地址标识符叫做IP地址,IP v.4中IP地址是一个32位的二进制地址。网络中的每一个主机或路由器至少有一个IP地址,在Internet中不允许有两个设备使用相同的IP地址。如果一台主机或路由器连接到两个或多个物理网络,那么它可以拥有两个或多个IP地址。 IP地址采用分层结构,由网络号和主机号两部分组成(如下图所示): 网络号 主机号 IP地址的长度为32位,用点分十进制表示,格式为x.x.x.x,每个x表示8位,每个x的值为0~255(例如202.133.29.119)。根据不同的取值范围,IP地址可以氛围五类,IP地址中的前五位用于标识IP地址的类别,具体的分类规则如下: A类地址的第一位为0。 B类地址的第两位为10。 C类地址的第三位为110。 D类地址的第四位为1110。 E类地址的第五位为11110。 设计IP地址的最初目的是希望每个IP地址都能唯一地、确定地标示一个网络或一台主机,但是这种方法同时也存在着两个重要的问题,即IP地址的有效利用率和路由器的工作效率。 为了解决这个问题,人们提出了子网(subnet)和超网(supernet)的概念。子网就是将一个大网络划分成几个较小的网络,而每个小网络都有其自己的地址。超网就是将一个组织所属的几个C类网络合并成一个更大地址范围的逻辑网络。 划分子网实际上就是在IP地址系统中增加一个层次。三级IP地址的表示方法为net ID-subnet ID-host ID。第一级网络号定义了网点的位置;第二级网络号定义了物理子网;第三级主机号定义了主机和路由器到物理网络的连接。三级层次的IP地址,一个IP分组的路由选择过程分为三步:第一步将分组转发给网点,第二步转发给物理网络,第三步转发给确切的主机。 当三级层次的IP地址提交后,一个很现实的问题是:如何从一个IP地址中提取出子网号。因此,提出了子网掩码(subnet mask)的概念。 子网掩码的表示方法:网络号和子网号置1,主机号置0。 判断某一IP地址是否属于某一子网只需将二进制IP地址与子网掩码按位进行“与”运算。若“与”运算所得值与给定子网地址一致,则说明该IP地址属于给定的子网。 三、设计方案 鉴于Visual C++6.0有强大的数据库管理功能,借助它可以轻松地开发出功能强,速度快,应用广并且占资源少的应用程序,所以选择Visual C++6.0来实现这个系统。 为了避免使系统使用过多重复的代码以及增加程序的可读性我们可以定义一个类结构ipTest;输入的字符串需要判断是否是只是数字而不是其他的不合法字符我们就需要定义一个NoIllegalChar()来判断其输入的串是否是字符;要判断IP地址及子网号是否合法我们就需要设计一个函数来判断IP地址及子网号是否正确的函数我们设函数分别为ipIsValid()和subnetIsValid();判断Ip是否属于该子网号我们用函数belong();最后我们需要输出结果我们就使用print()来实现输出。 程序流程图 四、程序编写 主要代码: 1)初始化mask和maskIsValid 判断mask是否超出范围 { if(i == smLen-2) { temp[0] = subnetPlusMask[i+1]; if(!isdigit(temp[0])) //判断temp中的值是否为字符 maskIsValid = false; } else if(i == smLen-3) { temp[0] = subnetPlusMask[i+1]; temp[1] = subnetPlusMask[1+2]; if(!(isdigit(temp[0])isdigit(temp[1]))) //判断temp中的值是否为字符

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档