欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    IP地址合法性判断与子网检测大学课程设计实验报告.docx

    • 资源ID:16787658       资源大小:375.41KB        全文页数:34页
    • 资源格式: DOCX        下载积分:1金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要1金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    IP地址合法性判断与子网检测大学课程设计实验报告.docx

    1、IP地址合法性判断与子网检测大学课程设计实验报告理工学院实 验 报 告实验名称IP地址合法性判断及子网检验课程名称计算机科学与技术成绩班级学号日期2013年1月地点计算机学院一. 实验目的本设计要求编辑写程序,判断一个ip地址是否合法,并判断该地址是否属于一个给定子网,从而考察读者是否对ip地址概念及其子网划分有非常清楚的认识。1加深对IP地址及subnet的认识;2了解IP地址的划分;3. 了解subnet的作用和产生因素,subnet的划分;4. 实际操作编写规则,匹配IP和subnet,加深理解二. 设计要求在掌握ip地址表示方法及子网划分方法的基础上,按如下要求完成程序。1:命令格式:

    2、ip_test subnet/mask ip_addr 其中,ip_test为程序名;subnet为子网号,mask是一个数值,代表子网掩码连续1的个数,ip_addr是要测试的ip地址。2:判断subnet和ip_addr的合法性。 在判断ip地址合法性时要自行编代码,不要使用任何inet函数。判断时要考虑全面。3:判断掩码的合法性。4:在ip地址合法的前提下,判断ip_addr是否属于子网subnet。5:输出命令行中的ip是否合法,掩码是否合法,以及ip_addr是否属于子网subnet.三. 实验环境(软件、硬件及条件)1软件操作系统:Windows xp(Windows NT以上版本

    3、皆可)编程环境:Microsoft Visual Studio 2008(兼容MS VS2005,亦可使用VC6.0等)编程语言:C+测试环境: MS-DOS2硬件现阶段常见PC四. 实验方法Part 1 实验原理我们说过因特网是把全世界的无数个网络连接起来的一个庞大的网间网,每个网络中的计算机通过其自身的IP地址而被唯一标识的,据此我们也可以设想,在Internet上这个庞大的网间网中,每个网络也有自己的标识符。我们把计算机的IP地址也分成两部分,分别为网络标识和主机标识。同一个物理网络上的所有主机都用同一个网络标识,网络上的一个主机(包括网络上工作站、服务器和路由器等)都有一个主机标识与其

    4、对应IP地址的4个字节划分为2个部分,一部分用以标明具体的网络段,即网络标识;另一部分用以标明具体的节点,即主机标识,也就是说某个网络中的特定的计算机。另一方面,只有在一个网络号下的计算机之间才能直接互通,不同网络号的计算机要通过网关(Gateway)才能互通。但这样的划分在某些情况下显得并十分不灵活。为此IP网络还允许划分成更小的网络,称为子网(Subnet),这样就产生了子网掩码1. IP的寻址规则 (1).ip分类规则 a、 网络地址必须唯一。 b、 网络标识不能以数字127开头。在A类地址的第一位为0,数字127保留给部回送函数。 B类地址的前两位为10;C类地址的前三位为110;D类

    5、地址的前四位为 1110;E类地址的前五位为 11110。c、 网络标识的第一个字节不能为255。数字255作为广播地址。 d、 网络标识的第一个字节不能为“0”,“0”表示该地址是本地主机,不能传送。e、不合法的IP地址类型:123.2.1123.23$.2.1123.2345.2.1123.23.45.1 2.主机寻址规则 a、主机标识在同一网络必须是唯一的。 b、主机标识的各个位不能都为“1”,如果所有位都为“1”,则该机地址是广播地址,而非主机的地址。 c、主机标识的各个位不能都为“0”,如果各个位都为“0”,则表示“只有这个网络”,而这个网络上没有任何主机。3.确定子网掩码数 用于子

    6、网掩码的位数决定于可能的子网数目和每个子网的主机数目。在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。 定义子网掩码的步骤为: a、确定哪些组地址归我们使用。比如我们申请到的网络号为 “128.73.a.b”,该网络地址为B类IP地址,网络标识为“128.73”,主机标识为“a.b”。 b、根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。比如我们现在需要12个子网,将来可能需要16个。用第三个字节的前四位确定子网掩码。前四位都置为“1”,即第三个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。 c、把对应初始网络的各个位都置为“1”

    7、,即前两个字节都置为“1”,第四个字节都置为“0”,则子网掩码的间断二进制形式为:“11111111.11111111.11110000.00000000” d、把这个数转化为间断十进制形式为:“255.255.240.0” 这个数为该网络的子网掩码。4.IP掩码的标注 A、无子网的标注法 对无子网的IP地址,可写成主机号为0的掩码。如IP地址210.73.140.5,掩码为255.255.255.0,也可以缺省掩码,只写IP地址。 B、有子网的标注法 有子网时,一定要二者配对出现。以C类地址为例。IP地址中的前3个字节表示网络号,后一个字节既表明子网号,又说明主机号,还说明两个IP地址是否属

    8、于一个网段。如果属于同一网络区间,这两个地址间的信息交换就不通过路由器。如果不属同一网络区间,也就是子网号不同,两个地址的信息交换就要通过路由器进行。例如:假设maskwe为27,对于IP地址为210.73.140.5的主机来说,其主机标识为00000101,对于IP地址为210.73.140.16的主机来说它的主机标识为00010000,以上两个主机标识的前面三位全是000,说明这两个IP地址在同一个网络区域中,这两台主机在交换信息时不需要通过路由器进行;210.73.60.1的主机标识为00000001,210.73.60.252的主机标识为11111100,这两个主机标识的前面三位000

    9、与011不同,说明二者在不同的网络区域,要交换信息需要通过路由器。其子网上主机号各为1和252。Part 2 具体实现通过以上的原理,我们就知道了在检验IP地址和子网检验时应该明确的问题,关键的两点就是把输入的IP分解成各段,然后判断子网号,掩码和ip地址的基本格式是否合法,其次:如果三者的基本格式都合法,才调用断定,ip地址是否为子网成员,的函数。该函数同时判别子网号与掩码是否匹配,子网号为全0或全1,主机号为全0、全1。1. 实现流程 2. 编程本部分的编程的主要目的是算法的实现,主要的方法是C+中字符串处理。(1)类设计a.属性char ip15; /用于存放ip地址char ip_Te

    10、mp15; /用于存放ip地址char subnet_mask18; /用于存放subnet_mask地址char subnet18; /用于存放subnet地址char subnet_Temp18; /用于存放subnet地址int mask; /用于存放mask(1的个数)bool maskIsValid; /用于判断的个数是否合适,或是否与subnet匹配 b.方法构造函数,析构函数:ipTest(char *,char *); /自定义初始化类函数ipTest(); /析构函数 主判断函数 (即主要的方法):void AllJudgment(); /判断mask,subnet,ip的合

    11、法性问题bool ipIsValid(char *); /判断ip是否合法Bool subnetIsValid(char *); /判断子网号subnet是否合法bool NoIllegalChar(char *); /ip,subnet地址中非法字符的判断bool maskIsMatSubnet(int,char *);/判断mask与subnet是否匹配工具函数: void print(); /判断ip是否为子网成员,并输出判断结果void split(char *,int *); /把单个字符地址转换为十进制数值型地址(含四段)Int toBinary(int a); /十进制int型数

    12、据转换为二进制int型数据char * toString(int *a); /把二进制int型数据转换为一个整体的二进制字符型数据 (2)主函数int main(int argc,char *argv) 函数 1.获取参数 2.简单判断参数格式(长度) 3.若是正常参数,实例化 ipTest类 4.调用主判断函数void AllJudgment() 判断 5.输出结果 (3)程序流程(4)头文件#include #include #include #include #include #include using namespace std;五. 实验分析及测试本部分测试了正常输入和非法输入时,

    13、程序对输入的判断,编程的环境为VS2008,在解决方案文件夹下面的Debug文件夹里面生成可执行文件;运行MS-DOS,进入Debug文件夹进行测试。1.算确性检测(1)用正确格式和合法的数据的输入,测试Mask和IP的匹配测试数据: IP:128.196.33.12 Mask:15和16分析:IP:128.196.33.12属于B类IP地址,前16位位网络段,后16位为主机段,所以Mask至少为16结果截图:(2)用正确格式和合法的数据的输入,测试主网和子网的匹配测试数据: 主网IP:128.196.33.12子网IP:128.196.127.17 和128.196.63.17 Mask:1

    14、8 分析:主网IP 和子网IP都是属于B类IP地址, 前8位为网络段,后8位为主机段,Mask至少为16由于Mask为18,可知道在主机段中前两位,也就是IP地址的第9,10位为子网号(18-16=2);而B 类IP地址的子网掩码为255.255.0.0所以可知:IP:128.196.33.12 1000 0000.1100 0100.0010 0001.0000 1100 2位相于,得:00Mask:255.255.0.0 1111 1111.1111 1111.0000 0000.0000 0000 2位相于,得:01IP:128.196.127.17 1000 0000.1000 010

    15、0.0111 1111.0001 0001结果为不匹配。截图:IP:128.196.33.12 1000 0000.1100 0100.0010 0001.0000 1100 2位相于,得:00Mask:255.255.0.0 1111 1111.1111 1111.0000 0000.0000 0000 2位相于,得:00IP:128.196.63.17 1000 0000.1000 0100.0011 1111.0001 0001结果为匹配。截图:(3)补充说明:i)主网和子网匹配的时候,实际上的与运算的位数是Mask个数,即Mask有多少,就相与前多少个位。而以上例子中可知,B类IP地址

    16、的子网掩码为255.255.0.0,所以前8位全是1,所以无论IP是多少,相与结果都是1,即不用考虑网络段,直接相与主机段的前n 段即可,n=(mask-所属网络分类的主机段位数)。本测试例子中位2。ii)考虑(2)中的两个3个IP地址可以发现当主网IP为128.196.33.12,mask为18时,IP和子网掩码相与,主机号前两位为00,所以可推出,子网IP的只需要主机段的前两位为00,则都可以匹配,即子网IP的第3节(第17位到第24位)为00XX XXXX ,转化为十进制就是小于63的整数就可以匹配。 2.输入合法性测试本实验程序规定输入的标准参数输入格式为:X.X.X.X/MASK X

    17、.X.X.X ,其中:X为0-255的十进制整数,mask为0-32的十进制整数,两个IP地址中间用空格分开,IP地址的为4段,每一段都用 “.”分开,IP地址中允许出现空格或其他字符(1)输入的IP地址中含有非法字符测试数据: 主网IP:128.196.33.a2 子网IP:12e.196.127.17 Mask:1h 结果截图:(2)输入的IP地址段数不正确测试数据: 主网IP:128.33.12 子网IP:126.196. Mask:18 结果截图:(3)没有输入mask测试数据: 主网IP:128.196.33.12 子网IP:128.196.33.11 结果截图: (4)输入mask

    18、超出合法围 测试数据: 主网IP:128.196.33.12 子网IP:128.196.33.11 Mask:35 结果截图: (5)输入IP超出合法围 测试数据: 主网IP:555.196.33.12 子网IP:128.999.33.11 Mask:25 结果截图:(6)特殊的IP地址 测试数据: 主网IP:0.0.0.0 子网IP:127.1.1.1 Mask:0 结果截图: 测试数据: 主网IP:0.0.0.0 子网IP:255.255.255.255 Mask:0 结果截图: 六. 实验结论本实验根据现在通用的IP地址分配使用规则,设计实验算法,运用C+字符转函数处理,程序实现了基本要

    19、求的功能,考虑到了多方面的因素;另一方面,设计之初的思路把此程序定位在接口工具程序,所以省略掉UI的设计,考虑到了扩展性的方面需要,程序提供简单、方便的接口和较为简单参数,方便扩展使用。仍存在的问题:数据结构的设计不够清晰简练和方便使用,可读性不太好;主函数流程存在一定的问题,理路不是很清晰,主要是类的各个方法的设计没有总体考虑,设计之初没有考虑,在需要时才加,导致程序结构有点乱,不易阅读和检查。七. 附录 源代码说明:源文件语言:C+文件数:1源文件名:ipTest.cpp#include #include #include #include #include #include using

    20、namespace std;/ipTest类定义class ipTest char ip15; /用于存放ip地址 char ip_Temp15; /用于存放ip地址 char subnet_mask18; /用于存放subnet_mask地址 char subnet18; /用于存放subnet地址 char subnet_Temp18; /用于存放subnet地址 int mask; /用于存放mask(1的个数) bool maskIsValid; /用于判断的个数是否合适,或是否与subnet匹配public: ipTest(char *,char *); /自定义初始化类函数 ipT

    21、est(); /析构函数 bool ipIsValid(char *); /判断ip是否合法 bool subnetIsValid(char *); /判断子网号subnet是否合法 bool NoIllegalChar(char *); /ip,subnet地址中非法字符的判断 bool maskIsMatSubnet(int,char *);/判断mask与subnet是否匹配 void AllJudgment(); /判断mask,subnet,ip的合法性问题 void print(); /判断ip是否为子网成员,并输出判断结果 void split(char *,int *); /把

    22、单个字符地址转换为十进制数值型地址(含四段) int toBinary(int a); /十进制int型数据转换为二进制int型数据 char * toString(int *a);/把二进制int型数据转换为一个整体的二进制字符型数据;/main主函数int main(int argc,char *argv) /自动读取数据 /cout目录地址:argv0endl; /argv0表示ipTest.exe的保存目录地址 coutsubnet_mask : argv1endl; /argv1表示第二个参数,即subnet/mask coutip地址: argv2endlendl;/argv2表示

    23、第三个参数,即ip /判断段数是否输入合法 if(argc!=3) /argc表示输入的参数个数,无参数输入时,其值为,因为默认argv0总是有的 cout18) cout15) coutip 输入非法!; system(pause); return 0; ipTest test(argv1,argv2); /实例化类,传入两个参数 test.AllJudgment();/调用函数,判断mask,subnet,ip的合法性问题 system(pause);/系统暂停 return 0; /构造函数ipTest:ipTest(char *subnet_mask,char *ip) maskIsV

    24、alid=true; /设置maskIsValid默认为合法 char temp2;/定义变量 int i,len; len=strlen(subnet_mask); /*从subnet/mask中分离出subnet地址*/ for(i=0;isubneti=subnet_maski; this-subnet_Tempi=subnet_maski; subnet_Tempi=0; subneti=0; /*判断mask是否为数值*/ if(len-(i+1)0) /判断mask是否为一/二位字节 if(len-(i+1)=1) /表明mask是一位 temp0=subnet_maski+1;

    25、/判断字符是否为数值型字符 if(!isdigit(temp0) /isdigit()为库函数,可以调用 coutmask中含有非数字的非法字符,error!endl; maskIsValid=false; /mask不是数值,则设置为false else if(len-3)=i) /表明mask是二位 temp0=subnet_maski+1; temp1=subnet_maski+2; if(!(isdigit(temp0) & isdigit(temp1) coutmask中含有非数字的非法字符,error!endl; maskIsValid=false; mask=atoi(temp)

    26、; /自动把数字字符转换为对应的十进制数值的函数 if(mask32) maskIsValid=false; else /表明mask为空或字节超出围 coutmask为空或超出围,error!subnet_mask,subnet_mask); /给subnet_mask赋值 strcpy(this-ip,ip); /给ip赋值 strcpy(this-ip_Temp,ip); /给ip_temp赋值/判断mask,subnet,ip的合法性问题void ipTest:AllJudgment() /设置标志subnet地址是否合法的bool型变量,并调用subnetIsValid函数判断 bo

    27、ol subnetIsV=subnetIsValid(subnet_Temp); /设置标记ip地址是否合法的bool型变量,并调用ipIsValid函数判断 bool ipIsV=ipIsValid(ip_Temp); /设置标记mask与subnet地址是否匹配的bool型变量,并调用maskIsMatSubnet函数判断 bool maskIsMatSub=maskIsMatSubnet(mask,subnet_Temp); coutendl; /*判断返回的值是否为真*/ if(!maskIsValid) /表示返回的maskIsValid是false coutmask输入非法!(mask为整数并在-32围)endl; else coutmask合法!endl; if(!maskIsMatSu


    注意事项

    本文(IP地址合法性判断与子网检测大学课程设计实验报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开