编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx

上传人:b****5 文档编号:5902206 上传时间:2023-01-02 格式:DOCX 页数:9 大小:91.40KB
下载 相关 举报
编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx_第1页
第1页 / 共9页
编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx_第2页
第2页 / 共9页
编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx_第3页
第3页 / 共9页
编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx_第4页
第4页 / 共9页
编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx

《编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx》由会员分享,可在线阅读,更多相关《编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx(9页珍藏版)》请在冰豆网上搜索。

编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号.docx

编写一个判断IP地址是否合法的计算机程序如果合法给出其子网号

 

计算机网络与通信实习报告

 

实习题目编写判断IP地址是否合法的计算机程序并给出子网号

学生专业班级

学生姓名(学号)

指导教师

完成时间2010年5月21日

实习(设计)地点信息楼139机房

 

2010年5月21日

 

一、实验题目

编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号

一、原理概述

1.TCP/IP协议的网络层使用的地址标识符叫做IP地址,IPv.4中IP地址是一个32位的二进制地址。

网络中的每一个主机或路由器至少有一个IP地址,在Internet中不允许有两个设备使用相同的IP地址。

如果一台主机或路由器连接到两个或多个物理网络,那么它可以拥有两个或多个IP地址。

IP地址采用分层结构,由网络号和主机号两部分组成(如下图所示):

网络号

主机号

IP地址的长度为32位,用点分十进制表示,格式为x.x.x.x,每个x表示8位,每个x的值为0~255(例如202.133.29.119)。

根据不同的取值范围,IP地址可以氛围五类,IP地址中的前五位用于标识IP地址的类别,具体的分类规则如下:

A类地址的第一位为0。

B类地址的第两位为10。

C类地址的第三位为110。

D类地址的第四位为1110。

E类地址的第五位为11110。

五类IP地址的结构如下所示:

0

网络号(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

#include

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]>=0&&ip[1]<256)&&(ip[2]>=0&&ip[2]<256)&&(ip[3]>=0&&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;

else

if(ip[1]==255&&ip[2]==255&&ip[3]==255)//将主机号为全1的去除

m=0;

else

if(ip[1]==0&&ip[2]==0&&ip[3]==0)//将主机号为全0的去除

m=0;

else

m=1;

}

elsem=0;

switch(m)//用m的值判断ip地址是否合法,m=0时不合法,m=1时合法

{

case0:

{printf("此地址不合法!

\n");

printf("重新输入请按ENTER,否则请按其他任意键!

\n");

scanf("%d",&l);

if(l==1)

gotoloop;

else

if(l!

=1)break;

}

case1:

{//判断地址的类型

if(ip[0]>0&&ip[0]<127)

printf("此地址为合法的A类地址!

\n");

elseif(ip[0]>127&&ip[0]<192)

printf("此地址为合法的B类地址!

\n");

else

printf("此地址为合法的C类地址!

\n");

//判断地址的类型

//以下程序实现ip地址点分十进制到二进制的转化

printf("其IP地址的二进制表示为:

\n");

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(i=0;i<4;i++)

{for(j=0;j<8;j++)

printf("%d",ipp[i][j]);

printf(".");//一个字节输出一个“.”,此处多输出一个“.”

}

printf("\n请输入子网掩码!

\n如:

255.224.0.0\n");

//将十进制子网掩码转化为二进制,存放到ym[4][8]中

scanf("%d.%d.%d.%d",&ym[0],&ym[1],&ym[2],&ym[3]);

printf("\n");

for(i=0;i<4;i++)

for(j=7;j>=0;j--)

{ymm[i][j]=ym[i]%2;

ym[i]=ym[i]/2;}

printf("子网掩码的二进制表示为:

\n");

for(i=0;i<4;i++)

{for(j=0;j<8;j++)

printf("%d",ymm[i][j]);

printf(".");

}

printf("\n");

//实现ip地址与掩码逐位相与

printf("子网号的二进制表示为:

\n");

for(i=0;i<4;i++)

{for(j=0;j<8;j++)

{ymm[i][j]=ymm[i][j]&ipp[i][j];

printf("%d",ymm[i][j]);}

printf(".");

}

printf("\n");

//将相与后的数用十进制输出

printf("子网号的点分十进制表示为:

\n");

for(i=0;i<4;i++)

for(j=0;j<8;j++)

ymm[i][j]=ymm[i][j]*pow((double)2,7-j);

for(i=0;i<4;i++)

for(j=0;j<8;j++)

ok[i]=ymm[i][j]+ok[i];

for(i=0;i<4;i++)

printf("%d.",ok[i]);

//将相与后的数用十进制输出

printf("\n");

}

}

}

四、运行结果

五、实习心的和体会

经过此次实习,对二、十进制之间的转换、IP地址的由来、作用以及分类有了进一步的了解,对IP地址与其掩码、子网号的关系有了较深刻的认识。

实习期间复习了以前学过的C语言受益匪浅。

在本次实习中遇到了很多困难也学到了很多东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,对有关IP地址和子网有了进一步的了解,而且进一步巩固了程序的编写。

在程序设计过程中一直对字符操作不懂的透彻,对子网的输出一直不对,在经历了对课本的查阅以及上网查阅终于找到了解决问题的方法,提高了自己的动手能力和解决问题的能力。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说还是有点困难,对以前所学过的知识理解得不够深刻,掌握得不够牢固,这就造成了微程序理解的困难,比如说……通过这次课程设计之后,一定把以前所学过的知识重新温故。

六、参考文献

[1]计算机网路(第5版)谢希仁电子工业出版社

[2]WINDOWS网络编程黄超北京:

人民邮电出版社.

[3]刘文涛.网络安全开发包详解.北京:

电子工业出版社

[4]《计算机网络》课程设计指导书

 

实习成绩评定表

学生姓名

专业班级

设计题目

编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号

指导教师评语及意见:

 

指导教师评阅成绩:

指导教师签字:

年月日

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 自考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1