编程判断ip地址的合法性.docx
- 文档编号:7498225
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:10
- 大小:57.86KB
编程判断ip地址的合法性.docx
《编程判断ip地址的合法性.docx》由会员分享,可在线阅读,更多相关《编程判断ip地址的合法性.docx(10页珍藏版)》请在冰豆网上搜索。
编程判断ip地址的合法性
XXXXXX大学
XXXXXXX学院
计算机网络与通信实习报告
设计题目编程判断IP地址的合法性
学生专业班级
学生姓名(学号)
指导教师
完成时间2010-5-22
实习(设计)地点信息楼139、112
2010年5月22日
一.实习题目
编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号。
二.原理概述
在计算机网络中,主要分为三类IP地址,即A类,B类,C类地址,每一类地址都有其特点和寻址原则。
每个IP地址均有32位,8个为一段,共四个字节。
每段范围在0~255,超出这个范围就是错误的。
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
子网掩码的计算根据其具体算法来计算。
1.三类地址的特点:
1.1A类IP地址
0
网络号(7位)
主机号(24位)
一个A类IP地址是指,在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。
如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。
A类IP地址中网络的标识长度为7位,主机标识的长度为24位,A类网络地址数量较少,可以用于主机数达1600多万台的大型网络。
1.2B类IP地址
10
网络号(14位)
主机号(16位)
一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。
B类IP地址中网络的标识长度为14位,主机标识的长度为16位,B类网络地址适用于中等规模规模的网络,每个网络所能容纳的计算机数为6万多台。
1.3C类IP地址
110
网络号(21位)
主机号(8位)
一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。
如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。
C类IP地址中网络的标识长度为21位,主机标识的长度为8位,C类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含254台计算机。
2.IP的寻址规则:
2.1网络寻址规则
网络地址必须唯一。
网络标识不能以数字127开头。
在A类地址中,数字127保留给内部回送函数。
网络标识的第一个字节不能为255。
数字255作为广播地址。
网络标识的第一个字节不能为“0”,“0”表示该地址是本地主机,不能传送。
2.2主机寻址规则
主机标识在同一网络内必须是唯一的。
主机标识的各个位不能都为“1”,如果所有位都为“1”,则该机地址是广播地址,而非主机的地址。
主机标识的各个位不能都为“0”,如果各个位都为“0”,则表示“只有这个网络”,而这个网络上没有任何主机。
3.IP子网掩码概述
3.1子网掩码的概念
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
3.2确定子网掩码数
用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。
在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。
定义子网掩码的步骤为:
①确定哪些组地址归我们使用。
比如我们申请到的网络号为“210.73.a.b”,该网络地址为c类IP地址,网络标识为“210.73”,主机标识为“a.b”。
②根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。
比如我们现在需要12个子网,将来可能需要16个。
用第三个字节的前四位确定子网掩码。
前四位都置为“1”,即第三个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。
③把对应初始网络的各个位都置为“1”,即前两个字节都置为“1”,第四个字节都置为“0”,则子网掩码的间断二进制形式为:
“11111111.11111111.11110000.00000000”
④把这个数转化为间断十进制形式为:
“255.255.240.0”
三.设计方案
1.实验开发环境
MicrosoftVisualC++6.0来实现这个系统。
2.系统分析及函数说明
为了避免使系统使用过多重复的代码以及增加程序的可读性我们可以定义一个类结构ipTest;输入的字符串需要判断是否是只是数字而不是其他的不合法字符我们就需要定义一个NoIllegalChar()来判断其输入的串是否是字符;要判断IP地址及子网号是否合法我们就需要设计一个函数来判断IP地址及子网号是否正确的函数我们设函数分别为ipIsValid()和subnetIsValid();判断Ip是否属于该子网号我们用函数belong();最后我们需要输出结果我们就使用print()来实现又好的输出。
其详细的函数及功能如下:
NoIllegalChar(char*):
判断包括是否有非法字符、段值是否为四
ipIsValid(char*):
判断IP地址是否合法也包括非法字符、段值的判断
subnetIsValid(char*):
判断子网号是否合法也包括非法字符、段值的判断
belong():
判断IP是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全0全1问题
print():
定义输出函数print。
3.程序流程图
a、主流程图
b、验证ip地址合法性流程图
c、验证子网掩码合法性流程图
四.程序编写
1.判断IP地址是否合法
#include
#include
int main()
{
char str[31],temp[31]; //定义IP地址为32位的字符类型
int a,b,c,d; //定义IP地址的四个字节为a,b,c,d,并且均为整型的
Printf(“请输入IP地址”)
while(gets(str) !
= NULL)
{
if(scanf(str,"%d.%d.%d.%d",&a,&b,&c,&d)==4
&& a>=0 && a<=255
&& b>=0 && b<=255
&& c>=0 && c<=255
&& d>=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地址合法性的函数
returnfalse;
returntrue;
for(i=0,j=0;i {//不用再检错 if(subnet[i]! ='.') temp[j++]=subnet[i];//temp数组中放'.'间的串 else{ subA[3-t]=atoi(temp);//subA数组中放'.'间的数据 j=0; t++; temp[0]=temp[1]=temp[2]='\0'; } } subA[0]=atoi(temp); temp[0]=temp[1]=temp[2]='\0'; iSubA=*(unsignedint*)subA;//iSubA中放subnet中'.'除外的串对应的数 for(i=0,j=0,t=0;i {//不用再检错 if(ip[i]! ='.') temp[j++]=ip[i]; else { ipA[3-t]=atoi(temp); j=0; t++; temp[0]=temp[1]=temp[2]='\0'; } } ipA[0]=atoi(temp); iIPA=*(unsignedint*)ipA;//iIPA中放IP中'.'除外的串对应的数 iMask=0xffffffff; iMask<<=(32-mask); //获得掩码 if((iSubA|iMask)! =iMask) {//说明sub与mask不匹配} if((iSubA^iMask)==0) {//说明子网号全1} if((iSubA&iMask)==0) {//说明子网号全0} if((iSubA)==(iIPA&iMask)) {//IP和掩码与,结果和子网号比较 if((iIPA|iMask)==iMask) {//说明主机号全0} if((iIPA|iMask)==0xffffffff) {//说明主机号全1} //ip属于subnet } //ip不属于subnet else cout<<""< } 五.运行结果 1.测试Ip地址是否合法如图 分析: IP地址不符合格式要求! 分析: 子网号出现了“$”字符,其为非法字符,所以出错! 分析: 子网号的段数不是四,所以出错! 分析: IP地址段数不是四,所以出错! 2.简单判断子网号及掩码长度是否超出范围如图 分析: 因为程序里设置的子网号和掩码字符串长度最多是18个字符而这里有20个字符大于18,所以出错! 分析: 程序中的IP地址字符串最长只有15个而程序中有17个字符大于15个,所以出错! 3.测试子网号与掩码是否匹配如图 分析: 子网号转换为二进制: 00000000110000000000000000000000 子网掩码转换成二进制: 11111111100000000000000000000000 从以上可以看出子网号与子网掩码不匹配与输出结果是一样的说明程序算法是正确的! 分析: 子网号转换为二进制: 00000000100000000000000000000000 子网掩码转换成二进制: 11111111100000000000000000000000 从以上可以看出子网号与子网掩码匹配与输出结果是一样的说明程序算法是正确的! 六.实习心得与体会 历经一周的时间,通过对该课程的设计,使我对IP地址的形成及合法性有深层次的理解。 对子网判断有个清晰的认识;即计算机网络的IP地址主要分为三类,A,B,C三类。 一个主机号由网络号和主机号两大部分组成,子网号是在主机号中抽出几位来作为子网号的。 相同的子网掩码可以有不同的网络地址。 此次课程设计让我能够将所学知识融会贯通、进一步系统化,进一步提高软件设计的能力,为以后的更高一级的软件设计打下坚实基础。 在课程设计的最初阶段我遇到了一些问题,比如我不确定用哪一种语言编写试验程序更简洁明了,在充分比较了VB和C语言后,我发现对C语言的掌握程度远比VB要好,而且C语言的语句比较简洁,符合编程的一般常理,最终我决定用C语言进行整个的编程。 确定好实验开发环境之后,我开始着手实验题目的分析与实验原理相关知识的储备,通过查阅计算机网络课本及网上资源的利用,初步掌握了IP地址及子网掩码的相关概念。 接下来我开始复习C语言的一些编程语句及编程技巧,根据实验的要求着手编写试验程序。 在程序的调试过程中遇到的问题是最多的,比如类型不匹配,某一个变量没有定义等,但在错误提示下,逐一进行改错。 然后将运行结果进行截图。 最后在课程设计的要求下写实习报告。 在整个实习的过程中,我体会到了编程的严谨性,对我的分析能力有很大的提高,这将对我今后的学习有莫大的帮助! 参考文献: 1、计算机网络(第五版)谢希仁电子工业出版社2008年10月版 2、C程序设计(第三版)谭浩强清华大学出版社2005年7月版 XX文库-让每个人平等地提升自我3、《网络编程与开发技术》殷肖川、刘志宏、姬伟峰、万映辉西安交通大学出版社2003年9月版 课程设计成绩评定表 学生姓名 专业班级 设计题目 编程判断IP地址的合法性 指导教师评语及意见: 指导教师评阅成绩: 指导教师签字: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 判断 ip 地址 合法性