IP地址的合法性与子网判断_第1页
IP地址的合法性与子网判断_第2页
IP地址的合法性与子网判断_第3页
IP地址的合法性与子网判断_第4页
IP地址的合法性与子网判断_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、 课程设计目的 掌握IP地址的分类,准确理解子网、掩码的概念,确切地明了IP地址的合法格式。并判断该地址是否属于一个给定的子网。 二、设计的意义 1、有利于对基础知识的理解 2、有利于逻辑思维的锻炼 程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。 3、有利于与其他学科的整合 在程

2、序设计中,我们可以解决其它学科有关问题,也利用其它课程的有关知识来解决信息技术中比较抽象很难理解的知识。在信息技术课中整合其它学科的知识,发挥信息技术的优势。 4、有利于治学态度的培养。 程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。这当中就有一个严谨治学、一丝不苟的科学精神的培养。 三、 课程设计的内容和要求 在掌握IP地址的表示

3、方法以及子网划分方法的基础上,并以计算机网络中关于IP地址的相关理论知识为基石,运用C/C+语言按如下要求完成程序。 1在判断一个IP地址合法性时要自行编写代码,不要使用任何inet函数 2命令行格式: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_te

4、st202.113.16.0/24 202.113.16.10。(因为255.255.255.0是连续的24个1,所以用24表示) 3.判断subnet和ip_addr的合法性 在判断IP地址合法性时要自行编写代码,不要使用任何inet 函数。判断时要考虑各种情况,全面分析问题。例如以下IP地址均不合法: 123.2.1 123.23$.2.1 123.2345.2.1 123.23.45.1 4.判断掩码的合法性譬如说mask的值为负数或者大与32,这时输入的掩码就不合法。 5.在IP地址合法

5、,掩码合法以及子网号也合法的前提下,判断ip_addr是否属于subnet。 6.输出命令行中的ip是否合法,掩码是否合法,子网号码是否合法(可适当给出不合法的原因)以及ip_addr是否属于子网subnet。 7.还可以判断子网号,主机号全0,全1问题。四、课程设计代码#include <iostream.h>/头文件#include <string.h>/字符串头文件#include <stdlib.h>/ 分配n个数据项的内存连续空间,每个数据项的大小为size#include <stdio.h>/标准函数库中的输入输出

6、函数#include <math.h>/导入数学中的函数#include <ctype.h>/字符测试函数#include <winsock2.h>/socket通信,系统头文件#include <ws2tcpip.h>#include <time.h>/时间头文件#include <windows.h>/windows头文件#pragma comment(lib,"ws2_32.lib")/静态加入一个库文件/类结构class ipTest/定义一个类的,类的名字为ipTestpublic:char

7、ip15;/用于存放ip地址char subnetPlusMask18;/用于存放subnetPlusMask地址char subnet18;/用于存放subnet地址char TempIp15;/用于存放ip地址 bool maskIsValid;/用于判断的个数是否合适,或是否与subnet匹配int mask;/用于存放maskchar Tempsub18;/用于存放subnet地址 ipTest(char *,char *);/自定义初始化类函数ipTest();/析构函数bool NoIllegalChar(char *); /ip,subnet地址中非法字符的判断bool ipIs

8、Valid(char *); /判断ip是否合法bool subnetIsValid(char *); /判断子网号subnet是否合法void belong(); /判断IP是否为子网成员print();/判断ip是否为子网成员,并输出判断结果; /主函数void main(int argc,char * argv)/自动读取数据if(argc!=3) /判断参数格式化是否正确cout<<"please input command:ip_test subnet/mask ip "/输出语句return;elseif(strlen(argv1)>18) /

9、先判断最简单的错误,subnet/mask长度是否超出cout<<"subnet/mask is too long"/输出语句return;if(strlen(argv2)>15)/判断ip的长度cout<<"ip is too long"/输出语句return;ipTest test(argv1,argv2); /实例话ipTest类test.print(); /完成相应判别并输出结果/ip地址类构造函数ipTest:ipTest( char* subnetPlusMask, char *ip)maskIsValid=tr

10、ue;/设置maskIsValid默认为合法char temp2;/定义变量/把'/'前的字符复制到subnet字符数组中int smLen=strlen(subnetPlusMask);/取出subnetPlusMask的长度for( int i=0; i<smLen && subnetPlusMaski !='/' i+ )/从subnet/mask中分离出subnet地址this->subneti=subnetPlusMaski;/取出数组subnetPlusMaski的值赋给subnetithis->Tempsubi=s

11、ubnetPlusMaski;/取出数组subnetPlusMaski的值赋给Tempsubisubneti='0'Tempsubi='0'if(i<=smLen-2) /判断mask是否为一位还是两位数if(i=smLen-2)/表明mask是一位temp0=subnetPlusMaski+1;if( !isdigit(temp0) )/判断subnetPlusMaski+1是否是数字maskIsValid = false;/掩码是否有效做标记elseif( i = smLen-3 )/表明mask是二位 temp0=subnetPlusMaski+1;

12、/把mask存到temp数组里temp1=subnetPlusMaski+2;if( !(isdigit(temp0)&&isdigit(temp1) )maskIsValid=false;/把maskIsValid不合法mask = atoi(temp);/自动把数字字符转换为对应的十进制数值的函数if( mask<0 | mask > 32)/判断掩码的范围是否合法maskIsValid = false;else/表明mask为空或字节超出范围maskIsValid=false;/若mask是三位数,则表明mask输入非法strcpy( this->sub

13、netPlusMask, subnetPlusMask);/给subnet_mask赋值strcpy( this->ip, ip );/给ip赋值strcpy( this->TempIp, ip );/给TempIp赋值/判断mask,subnet,ip的合法性问题ipTest:print()bool subIsV=subnetIsValid(Tempsub);/设置标志subnet地址是否合法的bool型变量,并调用subnetIsValid函数判断bool ipIsV=ipIsValid(TempIp);/设置标记ip地址是否合法的bool型变量并调用ipIsValid函数判断

14、if(!subIsV)/判断子网是否合法cout<<"subnet is invalid ! "<<endl;elsecout<<"valid subnet: "<<subnet<<endl;if(!maskIsValid)/表示返回的maskIsValid是falsecout<<"mask is invalid!"<<endl;elsecout<<"valid mask:"<<mask<<end

15、l;if(!ipIsV)/判断ip是否合法cout<<"ip is invalid!"<<endl;elsecout<<"valid ip:"<<ip<<endl;/判断IP是否belong subnetif(subIsV&&ipIsV&&maskIsValid)belong();/调用belong函数/子函数,判断输入是否含有非数字字符bool ipTest:NoIllegalChar(char *ch)unsigned int i,k=0;for(i=0;i&

16、lt;strlen(ch);i+)/取出字符串ch的长度,并一个一个判断是否是数字字符if(isdigit(*(ch+i)=0)/判断是否是数字字符return false;return true;/判别IP地址是否合法bool ipTest:ipIsValid(char * ip)char ch=" ." /初始化数组变量 char *token,*dot4;/初始化指针变量int iplen=0;token=strtok(ip,ch);/以"."标志将IP字符串按节分开while(token!=NULL) /循环进行,知道结束dotiplen=tok

17、en; /将分开的每段赋值给dotiplen+;token= strtok(NULL,ch);if(iplen!=4)/判断ip的段数是否是四段cout<<this->Tempsub<<endl;return false; for(int i=0;i<4;i+) /判断四段中是否有非法字符或某段值非法if(!NoIllegalChar(doti)|atoi(doti)>255) return false;return true;/判断子网号是否合法bool ipTest:subnetIsValid(char* subnet)if( ! ipIsVali

18、d(subnet) /调用判别IP地址合法性的函数 return false;return true;/判断IP是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全0全1问题void ipTest:belong()int subLen=strlen(subnet);/取出子网的长度赋给sublenint ipLen=strlen(ip);/取出ip地址的长度赋给iplenunsigned int iIPA,iSubA,iMask;unsigned char subA4,ipA4;/定义字符数组变量char temp3;/定义temp数组int i,j,t=0;for(i=0,j=0;

19、i<subLen;i+)/不用再检错 if(subneti != '.')/判断是不是"."tempj+=subneti;/如果不是"."存放到temp数组中 elsesubA3-t = atoi(temp); /subA数组中放'.'间的字符数据转换成长整形 j=0; /初始化变量进入下一轮t+;temp0=temp1=temp2='0'subA0 = atoi(temp);/把temp数组的字符型数组转换成长整型temp0=temp1=temp2='0'/清空数组temp中的数据i

20、SubA = *( unsigned int *)subA; /iSubA中放subnet中'.'除外的串对应的数for(i= 0, j= 0, t= 0; i<ipLen; i+) /不用再检错if(ipi != '.')/判断ip数组中的字符是不是"."tempj+ = ipi;/把ip数组里面的数据存到temp数组里elseipA3-t = atoi(temp);/把temp数组中的字符型数组转换成长整型赋给ipA数组j=0; /清空数据t+;temp0=temp1=temp2='0'ipA0 = atoi(temp);/把temp数组中的字符型数组转换成长整型赋到ipA数组里面iIPA = *( unsigned int* )ipA; /iIPA中放IP中'.'除外的串对应的数iMask = 0xffffffff;/初始化iMask的值iMask<<=(32-mask); /获取掩码if( ( iSubA | iMask ) != iMask ) /说明sub与mask不匹配cout<<" 子网号与掩码不匹配,error!"<<endl;re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论