精品网络毕业论文报告IP地址的合法性及子网判断.docx
- 文档编号:1615528
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:27
- 大小:196.98KB
精品网络毕业论文报告IP地址的合法性及子网判断.docx
《精品网络毕业论文报告IP地址的合法性及子网判断.docx》由会员分享,可在线阅读,更多相关《精品网络毕业论文报告IP地址的合法性及子网判断.docx(27页珍藏版)》请在冰点文库上搜索。
精品网络毕业论文报告IP地址的合法性及子网判断
中国计量学院
现代科技学院
课程设计报告本
课程设计名称IP地址的合法性及子网判断
系(部)信息系学号
专业计算机姓名
班级101指导教师虞戟
2013年7月5日
课程设计报告目录
一、设计的目的和要求1
1.目的1
二、设计任务2
三、设计方案分析2
(一)总体设计2
(二)模块设计4
四、调试与运行4
(一)调试中遇到的问题和解决办法4
(二)运行说明5
(三)运行效果展示5
五、设计体会与建议8
附录一:
参考文献8
附录二:
源代码9
附件:
中国计量学院现代科技学院课程设计报告P.1
IP合法性和子网的判断
一、设计的目的和要求
1.目的
掌握IP地址的分类,准确理解子网、掩码的概念,确切地明了IP地址的合法格式。
并判断该地址是否属于一个给定的子网。
判断IP地址属于ABC那类网。
2.要求
根据后面介绍的IP地址与子网划分的知识,编写程序判断IP地址的合法性及属于子网。
1)以命令行形式运行:
IPAddresssubnet_addressmaskip_address
其中,IPAddress为程序名,subnet_address为子网地址,mask为掩码,ip_address为IP地址
2)判断IP地址属于ABC那类网。
3)判断subnet和ip_addr的合法性。
在判断IP地址合法性时要自行编写代码,不要使用任何inet 函数。
判断时要考虑各种情况,全面分析问题。
4)判断掩码的合法性。
譬如说mask的值为负数或者大与32,这时输入的掩码就不合法。
5)在IP地址合法,掩码合法以及子网号也合法的前提下,判断ip_addr是否属于subnet。
6)输出命令行中的ip是否合法,掩码是否合法,子网号码是否合法(可适当给出不合法的原因)以及ip_addr是否属于子网subnet。
7)还可以判断子网号,主机号全0,全1问题。
中国计量学院现代科技学院课程设计报告P.2
二、设计任务
通过程序正确的实现对IP地址合理性的判断;当给定一IP地址时,本程序能实现对其IP地址、子网地址、掩码的合法性做出正确的判断,以及能判断该IP地址是否属于子网,和IP地址属于ABC哪类网络
三、设计方案分析
(一)总体设计
1.分别输入子网号、掩码和IP地址。
2.分别判断子网号、掩码和IP地址的基本格式是否合法。
3.如果三者的基本格式都合法,才调用判定“IP地址是否为子网成员”的函数。
该函数同时判别子网号与掩码是否匹配,子网号为全0或全1,主机号为全0、全1.
4.如果三者的基本格式都合法,判断IP地址属于ABC哪类网
中国计量学院现代科技学院课程设计报告P.3
(程序流程图-1)
中国计量学院现代科技学院课程设计报告P.4
(二)模块设计
(模块流程图-2)
四、调试与运行
(一)调试中遇到的问题和解决办法
1.输入命令行进行运行时,却发现不管我们输入的子网地址是否合法,运行结果都显示:
subnet is invalid。
我们分析了很久也找不到原因,无奈我们再一次寻求同学的帮助。
他只是把整个程序大致浏览了一下就发现了错误,原来我们把char ip[15],char subnetPlusMask[18],char subnet[18],char TempIp[15]这几个变量设置成了私有变量,导致后面的程序不能访问。
2.输入192.168.1.024192.168.1.55显示出现不属于该子网,这是错误的。
然后在(iSubA&iMask)中发现了问题所在。
3.出现很多的地方少了},然后经过我详细的查找得以解决。
4.发现很多词语没有定义,然后经过查找发现定义类时,单词打错了。
中国计量学院现代科技学院课程设计报告P.5
(二)运行说明
程序编译成功后,打开cmd,然后打入cdd:
kcsjdebug(程序生成的Debug文件路径下),再进行打入TestIP(程序文件名)192.168.1.024192.168.1.55(IPAddresssubnet_addressmaskip_address),然后会出现运行结果,查看IP地址IP地址、子网地址、掩码的合法性,以及能判断该IP地址是否属于子网,和IP地址属于ABC那类网络。
(三)运行效果展示
(1)在命令提示窗口中输入命令:
TestIP192.133198.1.1;
TestIP256.1.1.024256.1.1.55
详细的判断IP地址、子网地址、掩码的合法性
中国计量学院现代科技学院课程设计报告P.6
(2)在命令提示窗口中输入命令:
TestIP19.16.1.02419.16.1.55
IP地址属于该子网,并且IP地址属于A类网
(3)在命令提示窗口中输入命令:
TestIP192.16.1.024168.125.168.192
IP地址不属于该子网,并且IP地址属于B类网
中国计量学院现代科技学院课程设计报告P.7
(4)在命令提示窗口中输入命令:
TestIP192.168.1.024192.168.2.55
IP地址不属于该子网,并且IP地址属于C类网
(5)在命令提示窗口中输入命令:
TestIP192.168.1.024192.168.1.55
IP地址属于该子网,并且IP地址属于C类网
中国计量学院现代科技学院课程设计报告P.8
五、设计体会与建议
这次课程设计,我收获了很多东西。
通过上网和到图书馆查阅资料,我更加深入的学习了C语言,并利用所学知识设计,充分锻炼,增强了我的程序设计能力,使我加深了对理论知识的理解和掌握。
充分体会到了理论固然重要,如果没有实践去验证,那也只是停在理论层面上,它的现实意义将无法得到体现。
所以,这次课程设计是理论与实践的结合,增强了我在这方面的能力。
通过这次课程设计,我更加深刻的理解了IP地址的合法性,IP地址与子网的从属关系,子网与子网掩码的关系。
在判断IP地址是否属于一个子网时,我对IP地址的分类以及子网划分有了更加深刻的理解。
在这次课程设计的过程中,我遇到了很多问题,但经过老师和同学的帮助,我解决了这些问题,并学到了很多知识,在此,对老师和同学表示真挚的感谢。
附录一:
参考文献
[2]张尧学,郭国强,王晓春,赵艳标。
计算机网络与Internet教程[第2版]。
清华大学出版社,2006,11。
中国计量学院现代科技学院课程设计报告P.9
附录二:
源代码
#include
#include { cout<<"目录地址: "< 中国计量学院现代科技学院课程设计报告P.10 cout<<"subnet_mask: "< cout<<"ip地址: "< 判断段数是否输入合法 if(argc! =3)argc表示输入的参数个数,无参数输入时,其值为,因为默认argv[0]总是有的 { cout<<"输入非法! "; return0; } else { 先简单判断subnetmask的长度 if(strlen(argv[1])>18) { cout<<"subnetmask输入非法! "; system("pause"); return0; } 先简单判断ip的长度 if(strlen(argv[2])>15) { cout<<"ip输入非法! "; system("pause"); return0; } } ipTesttest(argv[1],argv[2]);实例化类,传入两个参数 test.AllJudgment();调用函数,判断mask,subnet,ip的合法性问题 system("pause");系统暂停 return0; } 构造函数 中国计量学院现代科技学院课程设计报告P.11 ipTest: : ipTest(char*subnet_mask,char*ip) { maskIsValid=true;设置maskIsValid默认为合法 chartemp[2];定义变量 inti,len; len=strlen(subnet_mask); *******************从subnetmask中分离出subnet地址*************** for(i=0;i ='';i++) { this->subnet[i]=subnet_mask[i]; this->subnet_Temp[i]=subnet_mask[i]; } subnet_Temp[i]='\0'; subnet[i]='\0'; **************************判断mask是否为数值************************ if((len-(i+1)<3&&len-(i+1)>0))判断mask是否为一二位字节 { if(len-(i+1)==1)表明mask是一位 { temp[0]=subnet_mask[i+1]; 判断字符是否为数值型字符 if(! isdigit(temp[0]))isdigit()为库函数,可以调用 { cout<<"mask中含有非数字的非法字符,error! "< maskIsValid=false;mask不是数值,则设置为false } } elseif((len-3)==i)表明mask是二位 { temp[0]=subnet_mask[i+1]; temp[1]=subnet_mask[i+2]; if(! (isdigit(temp[0])&&isdigit(temp[1]))) { cout<<"mask中含有非数字的非法字符,error! "< 中国计量学院现代科技学院课程设计报告P.12 maskIsValid=false; } } mask=atoi(temp);自动把数字字符转换为对应的十进制数值的函数 if(mask<0||mask>32) maskIsValid=false; } else表明mask为空或字节超出范围 { cout<<"mask为空或超出范围,error! "< maskIsValid=false;若mask是三位数,则表明mask输入非法(其实为~32) } ******************************************************************** strcpy(this->subnet_mask,subnet_mask);给subnet_mask赋值 strcpy(this->ip,ip);给ip赋值 strcpy(this->ip_Temp,ip);给ip_temp赋值 } 判断mask,subnet,ip的合法性问题 voidipTest: : AllJudgment() { 设置标志subnet地址是否合法的bool型变量,并调用subnetIsValid函数判断 boolsubnetIsV=subnetIsValid(subnet_Temp); 设置标记ip地址是否合法的bool型变量,并调用ipIsValid函数判断 boolipIsV=ipIsValid(ip_Temp); 设置标记mask与subnet地址是否匹配的bool型变量,并调用maskIsMatSubnet函数判断 boolmaskIsMatSub=maskIsMatSubnet(mask,subnet_Temp); cout< ************************判断返回的值是否为真****************** 中国计量学院现代科技学院课程设计报告P.13 if(! maskIsValid)表示返回的maskIsValid是false { cout<<"maskerror! (mask为整数并在-32范围内)"< } * else { cout<<"mask合法! "< } * * if(! maskIsMatSub) { 表示返回的maskIsMatSub是false cout<<"mask与subnet不匹配,error! "< } else { cout<<"mask与subnet匹配! "< } * if(! subnetIsV) { 表示返回的subnetIsV是false cout<<"subneterror! "< } * else { cout<<"subnet地址合法! "< } if(! ipIsV) { 表示返回的ipIsV是false cout<<"ip地址非法! "< 中国计量学院现代科技学院课程设计报告P.14 } else { cout<<"ip地址合法! "< } * 都合法 if(maskIsValid&&maskIsMatSub&&subnetIsV&&ipIsV) { print(); } } 判断mask与subnet是否匹配 boolipTest: : maskIsMatSubnet(intmask,char*subnet_Temp) { intnbsubnet[4];用于放十进制的各段地址 调用把单个字符地址转换为十进制数值型地址(含四段)的函数,实现转换 split(subnet_Temp,nbsubnet); subnet是A类地址 if(nbsubnet[0]>0&&nbsubnet[0]<127&&mask<8) { mask的值小于 cout<<"mask与subnet不匹配,error! "< returnfalse; } subnet是B类地址 if(nbsubnet[0]>=128&&nbsubnet[0]<=191&&mask<16) { mask的值小于 cout<<"mask与subnet不匹配,error! "< returnfalse; } subnet是C类地址 if(nbsubnet[0]>=192&&nbsubnet[0]<=223&&mask<24) { 中国计量学院现代科技学院课程设计报告P.15 mask的值小于 cout<<"mask与subnet不匹配,error! "< returnfalse; } mask与subnet地址匹配 returntrue; } 把单个字符地址转换为十进制数值型地址(含四段) voidipTest: : split(char*chaddr,int*addr) { charch[]="."; char*token,*dot[4]; intiplen=0; token=strtok(chaddr,ch); while(token! =NULL) { dot[iplen]=token; addr[iplen]=atoi(dot[iplen]);atoi()函数把字符数值转换为int型数值 iplen++; token=strtok(NULL,ch); } } ip,subnet地址中非法字符的判断 boolipTest: : NoIllegalChar(char*ch) { inti,len=strlen(ch); for(i=0;i { if(ch[i]-'0'>9||ch[i]-'0'<0) { returnfalse; } } 中国计量学院现代科技学院课程设计报告P.16 returntrue; } 判断ip是否合法 boolipTest: : ipIsValid(char*ip) { charch[]="."; charip_one[18]; strcpy(ip_one,ip); char*token,*dot[4]; intiplen=0; 库函数strtok(),以ch[]为界限来分段 token=strtok(ip_one,ch); while(token! =NULL) { dot[iplen]=token; iplen++; token=strtok(NULL,ch);此时,第一个参数必须换为NULL } if(iplen! =4) { cout<<"地址"< "< returnfalse; } intj,t=0; for(j=0;j<=strlen(ip);j++) { if(ip[j]=='.') { t++; } } if(t! =3) 中国计量学院现代科技学院课程设计报告P.17 { cout<<"地址"< "< returnfalse; } inti; for(i=0;i { if(! NoIllegalChar(dot[i])||atoi(dot[i])>255) { if(! NoIllegalChar(dot[i]))判断含有非法字符 cout<<"地址"< "< if(atoi(dot[i])>255)判断数值溢出 cout<<"地址"< "< returnfalse; } } intflag=1;首先设置为非法,即全 for(i=0;i { if(atoi(dot[i])! =0) { 含有非的字段 flag=0; } } if(flag==1) { cout<<"地址"< "< returnfalse; } 中国计量学院现代科技学院课程设计报告P.18 flag=1;首先设置为非法,即全 for(i=0;i { if(atoi(dot[i])! =255) { flag=0; } } if(flag==1) { cout<<"地址"< "< returnfalse; } intj1=0,j2; if(ip==ip_Temp) { 首先判断ip是哪类地址 if(atoi(dot[0])>0&&atoi(dot[0])<127)A类ip地址 { j1=1;直接从开始 cout<<"Ip地址属于A类网"< } if(atoi(dot[0])==127)为的特殊号 { cout<<"ip地址"< error! "< returnfalse; } if(atoi(dot[0])>=128&&atoi(dot[0])<=191)B类ip地址 { j1=2; cout<<"Ip地址属于B类网"< } 中国计量学院现代科技学院课程设计报告P.19 if(atoi(dot[0])>=192&&atoi(dot[0])<=223)C类ip地址 { j1=3; cout<<"Ip地址属于c类网"< } if(atoi(dot[0])>223&&atoi(dot[0])<255) { cout<<"请重新输入ip地址"< "< returnfalse; } if(atoi(dot[0])==255) { cout<<"ip地址"< "< returnfalse; } j2=j1;j1用于判断全情况,j1用于判断全情况的起始下标 intflag=1;首先设置为非法,即主机号全 for(i=j1;i { if(atoi(dot[i])! =0) { flag=0; } } flag=1;首先设置为非法,即全 for(i=j2;i { if(atoi(dot[i])! =255) { 中国计量学院现代科技学院课程设计报告P.20 flag=0; } } if(flag==1) { cout<<"ip地址"< "< returnfalse; } } returntrue; } 判断子网号subnet是否合法 boolipTest: : subnetIsValid(char*subnet) { if(! ipIsValid(subnet))调用判断Ip的函数ipIsValid()进行判断 { returnfalse; } returntrue; } 判断ip是否为子网成员,并输出判断结果 voidipTest: : print() { charsubnet_one[15],ip
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 网络 毕业论文 报告 IP 地址 合法性 子网 判断