IP合法性子网判断.docx

上传人:b****5 文档编号:7604576 上传时间:2023-01-25 格式:DOCX 页数:14 大小:143.02KB
下载 相关 举报
IP合法性子网判断.docx_第1页
第1页 / 共14页
IP合法性子网判断.docx_第2页
第2页 / 共14页
IP合法性子网判断.docx_第3页
第3页 / 共14页
IP合法性子网判断.docx_第4页
第4页 / 共14页
IP合法性子网判断.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

IP合法性子网判断.docx

《IP合法性子网判断.docx》由会员分享,可在线阅读,更多相关《IP合法性子网判断.docx(14页珍藏版)》请在冰豆网上搜索。

IP合法性子网判断.docx

IP合法性子网判断

计算机网络课程设计报告

 

指导老师意见:

 

评定成绩:

指导老师签名:

年月日

 

摘要

设计要求编写程序,实现判断输出命令行中的ip是否合法,掩码是否合法以及ip_addr是否是属于子网subnet。

采用eclipse的开发工具,使用java编程实现,在判断ip地址合法性时,定义了一个静态的方法,在方法里面,使用正则表达式来判断ip地址的合法性,判断子网掩码也采用这样的方法判断,在判断ip地址是否属于某一个子网时。

将ip地址一位位与子网掩码做与运算,看结果是否和子网相等来判断ip地址是否属于某一个网络。

Ip地址采用点分10进制的方法来表示,最大的数为255,最小的数为0,其中数字不能以0开头。

子网掩码则只能有32种情况,其中网络号全1,主机号全0,由1和0的个数来确定子网掩码是否正确。

在这个设计中考虑到了以上的种种情况,根据用户输入的ip地址,掩码和子网,程序可以判断输入的ip地址,掩码和子网是否正确以及ip_addr是否是属于子网subnet。

b5E2RGbCAP

 

一课程设计目的和意义

1.1设计目的

掌握IP地址的分类,准确理解子网、掩码的概念,确切地明了IP地址的合法格式。

并判断该地址是否属于一个给定的子网。

p1EanqFDPw

1.2设计的意义

1、有利于基础知识的理解

通过《计算机网络与Internet教程》必修部分的学习,学生掌握了一些信息时代生存与发展必需的信息技术基础知识和基本技能,具备了在日常生活与学习中应用信息技术解决问题的基本态度与基本能力。

但是,学生对于程序、病毒的内涵,程序与文档、数据的区别,计算机运行的机理等知识内容的理解比较肤浅。

学生如果接触了程度设计,就能真正理解,从而进一步打破计算机的神秘感。

DXDiTa9E3d

2、有利于逻辑思维的锻炼

程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。

即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。

RTCrpUDGiT

3、有利于与其他学科的整合

在程序设计中,我们可以解决其它学科有关问题,也利用其它课程的有关知识来解决信息技术中比较抽象很难理解的知识。

在信息技术课中整合其它学科的知识,发挥信息技术的优势。

5PCzVD7HxA

4、有利于治学态度的培养。

程序设计中,语句的语法和常量变量的定义都有严格的要求,有时输了一个中文标点、打错了一个字母,编译就不通过,程序无法正常运行。

因此,程序设计初学阶段,学生经常会犯这样的错误,可能要通过几次乃至十多次的反复修改、调试,才能成功,但这种现象会随着学习的深入而慢慢改观。

这当中就有一个严谨治学、一丝不苟的科学精神的培养,又有一个不怕失败、百折不挠品格的锻炼。

jLBHrnAILg

二课程设计的内容和要求

2.1设计内容

1.在判断一个IP地址合法性时要自行编写代码,不要使用任何inet函数。

2.程序要求为命令行程序,格式为:

ip_testsubnetmaskip_addr

其中,程序名称为ip_test,参数为IP地址/子网掩码,如:

要测试的IP地址为202.113.16.10,子网号为202.113.16.0,子网掩码为255.255.255.0,则命令行为:

xHAQX74J0X

202.113.16.0255.255.255.0202.113.16.10。

<因为255.255.255.0是连续的24个1,所以这样表示)。

3.子网号和子网掩码的合法性也要检查。

4.运行结果提示需要提示:

IP地址是否合法、子网掩码是否合法和IP地址是否为子网成员。

在判断不合法IP时要考虑全面,比如以下情况均属于不合法

123..2.1

123.23$.2.1

123.2345.2.1

123.23.45.2.1

5.判断掩码的合法性。

6.输出命令行中的ip是否合法,掩码是否合法以及ip_addr是否是属于子网subnet。

2.2设计要求

 

三课程设计的相关技术

3.1ip地址简介

  所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。

  按照TCP/IP

例如一个采用二进制形式的IP地址是“00001010000000000000000000000001”,这么长的地址,人们处理起来也太费劲了。

为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节。

于是,上面的IP地址可以表示为“10.0.0.1”。

IP地址的这种表示法叫做“点分十进制表示法”,这显然比1和0容易记忆得多。

LDAYtRyKfE

  有人会以为,一台计算机只能有一个IP地址,这种观点是错误的。

我们可以指定一台计算机具有多个IP地址,因此在访问互联网时,不要以为一个IP地址就是一台计算机;另外,通过特定的技术,也可以使多台服务器共用一个IP地址,这些服务器在用户看起来就像一台主机似的。

Zzz6ZB2Ltk

  将IP地址分成了网络号和主机号两部分,设计者就必须决定每部分包含多少位。

网络号的位数直接决定了可以分配的网络数<计算方法2^网络号位数);主机号的位数则决定了网络中最大的主机数<计算方法2^主机号位数-2)。

然而,由于整个互联网所包含的网络规模可能比较大,也可能比较小,设计者最后聪明的选择了一种灵活的方案:

将IP地址空间划分成不同的类别,每一类具有不同的网络号位数和主机号位数。

dvzfvkwMI1

1.A类IP地址

  一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,地址范围1.0.0.1-126.255.255.254<二进制表示为:

00000001000000000000000000000001-01111110111111111111111111111110)。

可用的A类网络有126个,每个网络能容纳1600多万个主机。

rqyn14ZNXI

2.B类IP地址

  一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围128.1.0.1-191.254.255.254<二进制表示为:

10000000000000010000000000000001-10111111111111101111111111111110)。

可用的B类网络有16382个,每个网络能容纳6万多个主机。

EmxvxOtOco

3.C类IP地址

  一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。

范围192.0.1.1-223.255.255.254<二进制表示为:

11000000000000000000000100000001-11011111111111111111111011111110)。

C类网络可达209万余个,每个网络能容纳254个主机。

SixE2yXPq5

4.D类地址用于多点广播

  D类IP地址第一个字节以“1110”开始,它是一个专门保留的地址。

它并不指向特定的网络,目前这一类地址被用在多点广播

多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。

6ewMyirQFL

  地址范围224.0.0.1-239.255.255.254

5.E类IP地址

  以“11110”开始,为将来使用保留。

  E类地址保留,仅作实验和开发用。

  全零<“0.0.0.0”)地址指任意网络。

全“1”的IP地址<“255.255.255.255”)是当前子网的广播地址。

kavU42VRUs

3.2子网掩码简介

  通过IP地址的二进制与子网掩码的二进制进行与运算进行定某个设备的网络地址,

  也就是说通过子网掩码分辨一个网络的网络部分和主机部分子网掩码一旦设置,网络地址和主机地址就固定了。

  相对于使用子网掩码来识别网络地址,早期的使用类别进行网络地址的分类存在着地址大量浪费的不足。

  子网一个最显著的特征就是具有子网掩码。

与IP地址相同,子网掩码的长度也是32位,也可以使用十进制的形式。

例如,为二进制形式的子网掩码:

111111*********11111111100000000,采用十进制的形式为:

255.255.255.0。

y6v3ALoS89

 用于子网掩码的位数决定于可能的子网数目和每个子网的主机数目。

在定义子网掩码前,必须弄清楚本来使用的子网数和主机数目。

  M2ub6vSTnP

3.3ip地址的计算

 定义子网掩码的步骤为:

  A、确定哪些组地址归我们使用。

比如我们申请到的网络号为“210.73.a.b”,该网络地址为C类IP地址,网络标识为“210.73.a”,主机标识为“.b”。

0YujCfmUCw

  B、根据我们现在所需的子网数以及将来可能扩充到的子网数,用宿主机的一些位来定义子网掩码。

比如我们现在需要12个子网,将来可能需要16个。

用第三个字节的前四位确定子网掩码。

前四位都置为“1”<即把第三字节的最后四位作为主机位,其实在这里有个简单的规律,非网络位的前几位置1原网络就被分为2的几次方个网络,这样原来网络就被分成了2的4次方16个子网),即第三个字节为“11110000”,这个数我们暂且称作新的二进制子网掩码。

eUts8ZQVRd

  C、把对应初始网络的各个位都置为“1”,即前两个字节都置为“1”,第四个字节都置为“0”,则子网掩码的间断二进制形式为:

“11111111.11111111.11110000.00000000”sQsAEJkW5T

  D、把这个数转化为间断十进制形式为:

“255.255.240.0”这个数为该网络的子网掩码。

 子网掩码一共分为两类。

一类是缺省子网掩码,一类是自定义子网掩码。

缺省子网掩码即未划分子网,对应的网络号的位[1][2]都置1,主机号都置0。

GMsIasNXkA

  A类网络缺省子网掩码:

255.0.0.0

  B类网络缺省子网掩码:

255.255.0.0

  C类网络缺省子网掩码:

255.255.255.0

  自定义子网掩码是将一个网络划分为几个子网,需要每一段使用不同的网络号或子网号,实际上我们可以认为是将主机号分为两个部分:

子网号、子网主机号。

形式如下:

TIrRGchYzg

  未做子网划分的ip地址:

网络号+主机号

  做子网划分后的ip地址:

网络号+子网号+子网主机号

  也就是说ip地址在化分子网后,以前的主机号位置的一部分给了子网号,余下的是子网主机号。

子网掩码是32位二进制数,它的子网主机标误用部分为全“0”。

利用子网掩码可以判断两台主机是否中同一子网中。

若两台主机的IP地址分别与它们的子网掩码相“与”后的结果相同,则说明这两台主机在同一子网中。

7EqZcWLZNX

3.4子网划分简介

 子网的划分,实际上就是设计子网掩码的过程。

子网掩码主要是用来区分IP地址中的网络ID和主机ID,它用来屏蔽IP地址的一部分,从IP地址中分离出网络ID和主机ID.子网掩码是由4个十进制数组成的数值"中间用"。

"分隔,如255.255.255.0。

若将它写成二进制的形式为:

11111111.11111111.11111111.00000000,其中为"1"的位分离出网络ID,为"0"的位分离出主机ID,也就是通过将IP地址与子网掩码进行"与"逻辑操作,得出网络号。

lzq7IGf02E

  例如,假设IP地址为192.160.4.1,子网掩码为255.255.255.0,则网络ID为192.160.4.0,主机ID为0.0.0.1。

计算机网络ID的不同,则说明他们不在同一个物理子网内,需通过路由器转发才能进行数据交换。

zvpgeqJ1hk

  每类地址具有默认的子网掩码:

对于A类为255.0.0.0,对于B类为255.255.0.0,对于C类为255.255.255.0。

除了使用上述的表示方法之外,还有使用于网掩码中"1"的位数来表示的,在默认情况下,A类地址为8位,B类地址为16位,C类地址为24位。

例如,A类的某个地址为12.10.10.3/8,这里的最后一个"8"说明该地址的子网掩码为8位,而199.42.26.0/28表示网络199.42.26.0的子网掩码位数有28位。

NrpoJac3v1

  如果希望在一个网络中建立子网,就要在这个默认的于网掩码中加入一些位,它减少了用于主机地址的位数。

加入到掩码中的位数决定了可以配置的于网。

因而,在一个划分了子网的网络中,每个地址包含一个网络地址、一个子网位数和一个主机地址,1nowfTG4KI

四课程设计过程

4.1主流程图

图3-1 主流程图

4.2验证ip地址合法性流程图

图3-2 验证ip地址合法性流程图

4.3验证子网掩码合法性流程图

图3-3 验证子网掩码合法性流程图

4.4验证ip是否属于某个子网流程图

fjnFLDa5Zo

图3-4 验证ip是否属于某个子网流程图

五课程设计小结

这次课程设计,感触颇深!

课程设计是学生考试前最后一个重要学习环节,是学习深化与升华的重要过程。

经过这次课程设计,我发现现在学习的知识远远不够,经过自学以及向同学们学习才得以完成这次课程设计。

这次课程设计,加强了自己掌握和理解计算机网络理论原理的能力,培养了自己的实际动手能力与综合设计能力,并提高了自己的技术素质。

课程设计一向是我比较喜欢的实践工程,因为从中会学到许多东西,既检验了我们前段时间理论知识的学习效果,又锻炼了我的动手实践能力。

tfnNhnE6e5

此次课程设计任务是写一个判断ip地址的合法性和判断这个ip地址是否为某一个子网,书上所采用的参加为用vc++编写程序,这段时间时间我一直在学习java,我把c++里所体现的思想用java写了出来,并用上了正则表达式等方法来完成这次实验,花了一天多时间就完成了程序的编写,遇到了不少问题,不过都解决了,总体上说收获不大,程序是我已经学过的,不过是应用一下而已,收获比较大的地方是关于计算机网络的知识,这次课程设计,让我明白了ip地址和子网掩码的关系,明白了子网的划分。

收获很大。

HbmVN777sL

希望以后还会有这样的机会锻炼自己。

也希望老师们能多为学生们提供类似的机会,只有这样的锻炼机会多了,才能提高我们的动手实践能力,以后在就业中才会更适应软件公司的需要。

V7l4jRB8Hs

 

六参考文献

⑴张尧学;计算机网络与Internet教程;北京:

清华大学出版社,2018.2

⑵吴功宣;计算机网络课程设计;北京:

机械工业出版社,2007.12

 

附加主要源代码及说明

packageqiu.ip。

importjava.util.regex.Matcher。

importjava.util.regex.Pattern。

/**

*计算机网络课程设计--IP地址的合法性及子网判断

*湖南文理学院计算机科学与技术学院

*/

publicclassIp_Test{

/*

*使用正则表达式判断ip地址是否正确

*/

privatestaticbooleanisIp(Stringst>{

Stringregex0="(2[0-4]\\d>"+"|(25[0-5]>"。

//这里表示从200开始的数83lcPA59W9

Stringregex1="1\\d{2}"。

//这里是100-200数的约定

Stringregex2="[1-9]\\d"。

//不能以0打头的二位数

Stringregex3="\\d"。

//0-9一位数

Stringregex="("+regex0+">|("+regex1+">|("+regex2+">|("mZkklkzaaP

+regex3+">"。

//每一个点分十进数都可以取上面的值

regex="("+regex+">.("+regex+">.("+regex+">.("+regexAVktR43bpw

+">"。

//加上"."

Patternp=Ppile(regex>。

//预编译这个正则表达式,使速度更快ORjBnOwcEd

Matcherm=p.matcher(st>。

//进行匹配

returnm.matches(>。

//返回匹配结果

}

/*

*使用正则表达式判断子网掩码是否正确

*/

privatestaticbooleanisMask(Stringst>{//正则表达式列出了所有情况2MiJTy0dTT

Stringre="(254|252|248|240|224|192|128|0>\\.0\\.0\\.0|"gIiSpiue7A

+"255\\.(254|252|248|240|224|192|128|0>\\.0\\.0|"

+"255\\.255\\.(254|252|248|240|224|192|128|0>\\.0|"uEh0U1Yfmh

+"255\\.255\\.255\\.(254|252|248|240|224|192|128|0>"。

IAg9qLsgBX

Patternp=Ppile(re>。

Matcherm=p.matcher(st>。

returnm.matches(>。

}

/*

*判断ip地址是否属于某一个网络

*/

privatestaticbooleango(Strings1,Strings2,Strings3>{WwghWvVhPE

String[]s33=s3.split("\\.">。

//ip地址变数组

String[]s22=s2.split("\\.">。

//子网掩码变数组

Stringok=""。

Stringre_ok=""。

for(inti=0。

i

i++>{

intint_ip=Integer.parseInt(s33[i]>。

//字符串转换成整形

intint_mask=Integer.parseInt(s22[i]>。

intre1=(int_ip&int_mask>。

//每个点分10进制数都进行与运算

Stringre=String.valueOf(re1>。

//整数转换成字符串

if(i!

=3>{//前三个点分10进制数后面加上"."

ok=re+"."。

re_ok+=ok。

}else{

re_ok+=re。

//最后一个点分10进制数不加"."

}

}

System.out.println("ip地址和子网掩与运算之后的结果为:

"+re_ok>。

System.out.println("网络号为:

"+s1>。

System.out

.println("---------------------------------------------------------------">。

asfpsfpi4k

returnre_ok.equals(s1>。

//比较字符串是否相同

}

publicstaticvoidmain(String[]args>{

//判断参数是否为3个

if(args.length!

=3>{

System.out.println("参数错误!

请重新输入">。

System.exit(0>。

}

System.out

.println("---------------------------------------------------------------">。

ooeyYZTjj1

//判断子网地址是否正确

if(isIp(args[0]>>{

System.out.println("子网地址正确!

为:

"+args[0]>。

}else{

System.out.println("子网地址不正确("+args[0]+">!

请重试...">。

BkeGuInkxI

System.exit(0>。

}

//判断子网掩码是否正确

if(isMask(args[1]>>{

System.out.println("子网掩码正确!

为:

"+args[1]>。

}else{

System.out.println("子网掩码不正确("+args[1]+">!

请重试...">。

PgdO0sRlMo

System.exit(0>。

}

//判断ip地址是否正确

if(isIp(args[2]>>{

System.out.println("ip地址正确!

为:

"+args[2]>。

}else{

System.out.println("ip地址不正确("+args[2]+">!

请重试...">。

3cdXwckm15

System.exit(0>。

}

System.out

.println("---------------------------------------------------------------">。

h8c52WOngM

//判断ip地址是否属于这个网络

if(go(args[0],args[1],args[2]>>{

System.out.println("OK!

ip地址("+args[2]+">属于这个网络("+args[0]v4bdyGious

+">">。

}else{

System.out.println("对不起!

ip地址("+args[2]+">不属于这个网络("+args[0]J0bm4qMpJ9

+">">。

}

System.out

.println("---------------------------------------------------------------">。

XVauA9grYP

}

}

 

调试运行

1编译工具及相关说明

编译环境:

Windows平台上的jdk1.6。

使用开发工具为elipse。

使用方法:

在eclipse上新建工程TestIp,在工程中新建一个类Test_Ip,编写代码,使用三个参数运行这个程序。

bR9C6TJscw

2开发中遇到的问题及解决办法

1.遇到的第一个问题:

面向对像的思想,java是完

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

当前位置:首页 > 农林牧渔 > 林学

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

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