编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号Word文档下载推荐.docx
《编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
A类地址的第一位为0。
B类地址的第两位为10。
C类地址的第三位为110。
D类地址的第四位为1110。
E类地址的第五位为11110。
五类IP地址的结构如下所示:
网络号(7位)
主机号(24位)
10
网络号(14位)
主机号(16位)
110
网络号(21位)
主机号(8位)
1110
组播地址(28)
11110
保留用于课程设计和将来使用
A类IP地址结构使用于有大量主机的大型网络。
由于主机号长度为24位,因此每一个A类网络的主机IP数理论上为2^24=16777216,由于全0和全不能用,所以每一个A类网络的主机IP数为16777214。
B类IP地址适用于一些国际性大公司与政府机构等中等大小的组织。
由于网络IP长度为14位,因此允许有2^14=16384个不同的B类网络,实际允许连接16382个网络。
C类IP地址适用于一些小公司与普通研究机构。
2.设计IP地址的最初目的是希望每个IP地址都能唯一地、确定地标示一个网络或一台主机,但是这种方法同时也存在着两个重要的问题,即IP地址的有效利用率和路由器的工作效率。
为了解决这个问题,人们提出了子网(subnet)和超网(supernet)的概念。
划分子网实际上就是在IP地址系统中增加一个层次。
三级IP地址的表示方法为netID-subnetID-hostID。
第一级网络号定义了网点的位置;
第二级网络号定义了物理子网;
第三级主机号定义了主机和路由器到物理网络的连接。
划分子网后原两级IP地址就变成三级的。
子网掩码的表示方法:
网络号和子网号置1,主机号置0。
若要从IP地址中提取出子网号将IP地址与子网掩码相与即可。
二、设计方案
该程序所完成的功能有判断IP地址是否合法,然后输出其子网号。
判断IP地址是否合法比较容易完成,然后把输入的IP地址以数组的形式输出其二进制形式,这牵扯到一个十进制转二进制的程序段。
然后输入子网掩码,并将其转换成二进制。
将IP地址的二进制遇子网掩码的二进制逐位相与,得到的结果就是其子网号,然后需要编写一个二进制转十进制的程序,将子网号以点分十进制的形式输出,即完成实验要求。
1.验证ip地址合法性流程图:
2.验证子网掩码是否正确
三、程序编写
#include<
stdio.h>
#include<
math.h>
voidmain()
{
intm,i,j,ip[4],ym[4],ymm[4][8],ipp[4][8],t,zw[4],l;
intok[4]={0,0,0,0};
printf("
请输入一个IP地址!
\n"
);
loop:
scanf("
%d.%d.%d.%d"
&
ip[0],&
ip[1],&
ip[2],&
ip[3]);
if((ip[0]>
=0&
&
ip[0]<
224)&
(ip[1]>
ip[1]<
256)&
(ip[2]>
ip[2]<
(ip[3]>
ip[3]<
256))
{if(ip[0]==0&
ip[1]==0&
ip[2]==0&
ip[3]==0)//把地址为全零的IP地址除去
m=0;
else
if(ip[0]==127)//将127.0.0.0去除
m=0;
if(ip[1]==255&
ip[2]==255&
ip[3]==255)//将主机号为全1的去除
m=0;
else
if(ip[1]==0&
ip[3]==0)//将主机号为全0的去除
else
m=1;
}
elsem=0;
switch(m)//用m的值判断ip地址是否合法,m=0时不合法,m=1时合法
case0:
{printf("
此地址不合法!
printf("
重新输入请按ENTER,否则请按其他任意键!
%d"
l);
if(l==1)
gotoloop;
else
if(l!
=1)break;
case1:
{//判断地址的类型
if(ip[0]>
0&
127)
此地址为合法的A类地址!
elseif(ip[0]>
127&
192)
printf("
此地址为合法的B类地址!
else
此地址为合法的C类地址!
//判断地址的类型
//以下程序实现ip地址点分十进制到二进制的转化
printf("
其IP地址的二进制表示为:
for(i=0;
i<
4;
i++)
for(j=7;
j>
=0;
j--)
{ipp[i][j]=ip[i]%2;
ip[i]=ip[i]/2;
}
//输出转化以后的ip地址
{for(j=0;
j<
8;
j++)
ipp[i][j]);
."
//一个字节输出一个“.”,此处多输出一个“.”
\n请输入子网掩码!
\n如:
255.224.0.0\n"
//将十进制子网掩码转化为二进制,存放到ym[4][8]中
ym[0],&
ym[1],&
ym[2],&
ym[3]);
for(i=0;
{ymm[i][j]=ym[i]%2;
ym[i]=ym[i]/2;
子网掩码的二进制表示为:
ymm[i][j]);
//实现ip地址与掩码逐位相与
子网号的二进制表示为:
{for(j=0;
{ymm[i][j]=ymm[i][j]&
ipp[i][j];
}
//将相与后的数用十进制输出
子网号的点分十进制表示为:
for(j=0;
ymm[i][j]=ymm[i][j]*pow((double)2,7-j);
ok[i]=ymm[i][j]+ok[i];
%d."
ok[i]);
四、运行结果
五、实习心的和体会
经过此次实习,对二、十进制之间的转换、IP地址的由来、作用以及分类有了进一步的了解,对IP地址与其掩码、子网号的关系有了较深刻的认识。
实习期间复习了以前学过的C语言受益匪浅。
在本次实习中遇到了很多困难也学到了很多东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,对有关IP地址和子网有了进一步的了解,而且进一步巩固了程序的编写。
在程序设计过程中一直对字符操作不懂的透彻,对子网的输出一直不对,在经历了对课本的查阅以及上网查阅终于找到了解决问题的方法,提高了自己的动手能力和解决问题的能力。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说还是有点困难,对以前所学过的知识理解得不够深刻,掌握得不够牢固,这就造成了微程序理解的困难,比如说……通过这次课程设计之后,一定把以前所学过的知识重新温故。
六、参考文献
[1]计算机网路(第5版)谢希仁电子工业出版社
[2]WINDOWS网络编程黄超北京:
人民邮电出版社.
[3]刘文涛.网络安全开发包详解.北京:
电子工业出版社
[4]《计算机网络》课程设计指导书
实习成绩评定表
学生姓名
专业班级
设计题目
指导教师评语及意见:
指导教师评阅成绩:
指导教师签字:
年月日