IP地址的合法性及子网判断JAVA.docx

上传人:b****3 文档编号:5221821 上传时间:2022-12-14 格式:DOCX 页数:15 大小:325.89KB
下载 相关 举报
IP地址的合法性及子网判断JAVA.docx_第1页
第1页 / 共15页
IP地址的合法性及子网判断JAVA.docx_第2页
第2页 / 共15页
IP地址的合法性及子网判断JAVA.docx_第3页
第3页 / 共15页
IP地址的合法性及子网判断JAVA.docx_第4页
第4页 / 共15页
IP地址的合法性及子网判断JAVA.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

IP地址的合法性及子网判断JAVA.docx

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

IP地址的合法性及子网判断JAVA.docx

IP地址的合法性及子网判断JAVA

IP地址的合法性及子网判断-JAVA

学号:

0121010680221

课程设计

 

题目

IP地址的合法性及子网判断

学院

计算机科学与技术学院

专业

软件工程

班级

1002

姓名

王思腾

指导教师

刘东飞

 

2013

6

19

6心得感悟。

14

 

课程设计任务书

学生姓名:

王思腾专业班级:

软件1002班

指导教师:

刘东飞工作单位:

计算机学院

题目四:

IP地址的合法性及子网判断

初始条件:

(1)学习相关知识

(2)C/C++/VC/VB/JAVA语言

(3)PC机一台

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

在掌握IP地址表示方法及子网划分的基础上,按如下要求完成程序。

1)命令行格式:

ip_testsubnet/maskip_addr,ip_test其中为程序名;subnet为子网号;mask是一个数值,代表子网掩码连续1的个数;ip_addr是要测试的IP地址。

例如,要测试的IP地址为202.114.16.10,子网号为202.113.16.0,子网掩码为255.255.255.0,则命令行为ip_test202.113.16.0/24202.114.16.10(因为255.255.255.0是连续的24个1,所以用24表示)。

2)判断subnet和ip_addr的合法性。

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

判断时要考虑全面,比如以下IP地址均不合法:

123..2.1/123.23$.2.1/123.2345.2.1/123.23.45.2.1

3)判断掩码的合法性。

4)在IP地址合法的前提下,判断ip_addr是否属于子网subnet。

5)输出命令行中的ip是否合法,掩码是否合法(可适当给出不合法的原因)以及ip_addr是否属于子网subnet。

时间安排:

第一、二天:

查阅资料,学习算法

第三、四天:

编程调试

第五天:

书写报告

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

2、相关知识:

1.IP地址相关概念

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

  按照TCP/IP(TransportControlProtocol/InternetProtocol,传输控制协议/Internet协议)协议规定,IP地址用二进制来表示,每个IP地址长

32bit,比特换算成字节,就是4个字节。

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

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

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

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

大型的互连网络中应该有一个全局的地址系统,它能够给连接到互联网的每一台主机或者路由器分配一个唯一的全局地址。

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

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

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

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

 

网络号

主机号

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

根据不同的取值范围,IP地址可以分为五类,IP地址中的前5位用于标识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数理论上为224=16777216。

B类IP地址适合用于一些国际性大公司与政府机构等中等大小的组织。

由于网络IP长度为14位,因此允许有214=16384个不同的B类网络,实际允许连接16382个网络。

C类IP地址适合用于一些小公司与普通的研究机构。

2.特殊的IP地址形式

(1)直接广播地址

A类,B类,C类IP地址中主机号全1的地址称为直接广播地址,用来使路由器将一个分组以广播方式发送给特定网络上的所有主机。

直接广播地址只能作为分组中的目的地址。

物理网络采用的是点—点传输方式,分组广播需要通过软件来实现。

网络号

主机号全1

(2)受限广播地址

网络号与主机号的32位全位1的地址为受限广播地址,用来将一个分组以广播方式发送给本网的所有主机。

本网的所有主机将接受该分组,路由器则阻挡该分组通过。

全1

(3)“这个网络上的这台主机”地址

全0

(4)“这个网络上的特定主机”地址

主机或路由器向本网络上的某个特定的主机发送分组,网络号部分为全0,主机号为确定的值。

这样的分组被相知在本网络内部。

网络号全0

主机号

(5)回送地址

回送地址用于网络软件测试和本地进程见通信。

TCP/IP协议规定网络号为 127的分组不能出现在任何网络上;主机和路由器不能为该地址广播任何寻址信息。

127

任意值(通常取1)

3.子网的划分

人们在早期设计与建设ARPAnet是,没有预料到网络的发展速度如此之快,应用范围如此之广。

当时个人计算机与局域网尚未出现。

所以,研究者在设计Internet地址的编址方案时,主要是针对大型互联的网络结构。

设计IP地址的最初目的是希望每个IP得志都能唯一地、确定地识别一个网络与一台主机,但是这种方法同时也存在着两个主要的问题,即IP地址的有效利用率和路由器的工作效率。

为了解决这个问题,人们提出了子网(subnet)和超网(supernet)的概念。

子网就是一个大的网络划分成几个较小的网络,而每一个小网络都是其自己的地址。

超网就是将一个组织所属的几个C类网络合并成为一个更大地址范围的逻辑网络。

划分子网实际上就是在IP地址系统中增加一个层次。

三级IP地址的表示方法为netID-subnetID-hostID。

第一级网络号定义了网点的位置;第二级子网号定义了物理子网;第三级主机号定义了主机和路由器到物理网络的连接。

三级层次的IP地址,一个IP分组的路由器的过程分为三步:

第一步将分组转发给网点,第二步转发给物理子网,第三步转发给确切的主机。

当三级层次的IP地址提出后,一个很显示的问题是:

如何从一个IP地址提取出子网号。

因此,提出了子网掩码(subnetmask)的概念。

子网掩码有时也叫做子网掩码。

子网掩码表示方法:

网络号与子网号置1,主机号置0。

如判断某一IP地址是否属于某一子网呢?

只需将二进制IP地址与子网掩码按位进行“与”运算。

若“与”运算所得值与给定子网地址一致,则说明该IP地址属于给定的子网。

3、课程设计分析:

在掌握IP地址的表示方法以及子网划分方法的基础上,并以计算机网络中关于IP地址的相关理论知识为基石,运用C/C++语言按如下要求完成程序。

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

3.2命令行格式:

ip_testsubnet/maskip_addr

其中,ip_test为程序名;subnet为子网号;mask是一个整型数值,代表子网掩码连续1的个数;ip_addr表示要测试的IP地址。

比如说,要测试的IP地址为202.113.16.10,子网号码是202.113.16.0,子网掩码是255.255.255.0,则命令行为ip_test202.113.16.0/24202.113.16.10。

(因为255.255.255.0是连续的24个1,所以用24表示)

3.3判断subnet和ip_addr的合法性。

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

判断时要考虑各种情况,全面分析问题。

例如以下IP地址均不合法:

123..2.1

123.23$.2.1

123.2345.2.1

123.23.45.1

3.4判断掩码的合法性。

无论是哪类地址,掩码的第一个字段都是255。

如果不是,一定是掩码非法。

3.5在IP地址、掩码以及子网号都合法的前提下,判断ip是否属于subnet。

需要进行与运算(&),将ip、subnet_mask相与,将得到的结果与subnet比较,如果相同,则证明该ip属于subnet。

3.6输出命令行中的ip是否合法,掩码是否合法,子网号码是否合法(可适当给出不合法的原因)以及ip是否属于子网subnet。

3.7程序流程图:

(见下页)

 

4、程序清单及注释:

packageiptest;

importjava.util.*;

classinput{

Scannerscanner=newScanner(System.in);

Strings=scanner.nextLine();

intflag;

//判断输入的IP地址是否合法,如果不合法从新输入,flag=1为不合法;

input(){

flag=0;

chara[]=s.toCharArray();

if(s.length()>15){

System.out.println("地址总长超过15");

flag=1;

}

for(inti=0;i

{

if((a[i]<'0'||a[i]>'9')&&a[i]!

='.')

{

System.out.println("地址中包含非法字符!

");

flag=1;

break;

}

}

intdian=0;

for(inti=0;i

{

if(a[i]=='.')

dian++;

}

if(dian!

=3)

{

System.out.println("地址中分隔符只能为3个!

");

flag=1;

}

for(inti=0;i

{

if(a[i]=='.'&&a[i+1]=='.')

{

System.out.println("地址中不能出现连续的分隔符!

");

flag=1;

break;

}

}

if(a[s.length()-1]=='.')//判断是否最后位为分隔符

{

System.out.println("地址最后位不能为分隔符!

");

}

if(a[0]=='.')//判断是否首位为分隔符

{

System.out.println("地址首位不能为分隔符!

");

flag=1;

}

String[]sss=s.split("\\.");

for(into=0;o

{

for(intp=0;p

{

intnum=Integer.parseInt(sss[o]);

if(num>255||num<0)

{

System.out.println("ERROR!

地址不在0至255之间!

");

flag=1;

break;

}

}

}

}

}

classsubnet_maskextendsinput{/*判断子网掩码第一个字节是否为255*/

intflag2=0;//判断输入的子网掩码是否合法,如果不合法从新输入,flag=1表示输入错误;

subnet_mask(){

String[]dian_s1=s.split("\\.");

intfirst=Integer.parseInt(dian_s1[0]);

if(first!

=255)

{

System.out.println("地址第一字节不是255!

");

flag2=1;

}

}

}

publicclassiptest{

publicstaticvoidmain(Stringg[])

{

System.out.println("请输入IP地址");

inputIP=newinput();

while(IP.flag==1){

System.out.println("输入IP地址有误,请重新输入IP地址:

");

inputxin_IP=newinput();

IP.s=xin_IP.s;

if(xin_IP.flag==0)

break;

}

System.out.println("请输入子网号");

inputsubnet=newinput();

while(subnet.flag==1){

System.out.println("您输入的子网号有错误!

请重新输入子网号:

");

inputxin_subnet=newinput();

subnet.s=xin_subnet.s;

if(xin_subnet.flag==0)

break;

}

System.out.println("请输入子网掩码");

subnet_masknew3=newsubnet_mask();

while(new3.flag==1||new3.flag2==1){

System.out.println("您输入的子网掩码有错误!

请重新输入子网掩码:

");

inputxin_new3=newinput();

new3.s=xin_new3.s;

if(xin_new3.flag==0)

break;

}

/*判断输入的Ip地址是否属于子网*/

Strings=IP.s;

Strings2=new3.s;

Strings3=subnet.s;

String[]split_s=s.split("\\.");

String[]split_s2=s2.split("\\.");

System.out.println("您输入的IP地址是:

"+IP.s);

System.out.println("您输入的子网地址是:

"+subnet.s);

System.out.println("您输入的子网掩码是:

"+new3.s);

//得出"XX"

intx00=Integer.parseInt(split_s[0]);

intx22=Integer.parseInt(split_s2[0]);

intand_x=x00&x22;//进行与运算

Stringright_mask=String.valueOf(and_x);

//得出余下的".XX.XX.XX"并和之前得出的"XX"合并

for(inti=1;i<4;i++)

{

intx=Integer.parseInt(split_s[i]);

intx2=Integer.parseInt(split_s2[i]);

intand_x12=x&x2;//进行与运算

Stringand_x11=String.valueOf(and_x12);

right_mask=right_mask.concat(".");

right_mask=right_mask.concat(and_x11);

}

//将得到的"XX.XX.XX.XX"和输入的子网掩码比较,如果相同,则证明属于,不同则不属于

if(right_mask.equals(s3))

{

System.out.println("您输入的IP地址属于子网——"+subnet.s);

}

else

System.out.println("您输入的IP地址("+IP.s+")"+"不属于子网"+subnet.s);

}

}

5、程序结果分析及结论:

 

5.1连续输入两个“.”,显示输入非法

5.2输入字段中有大于255或小于0的现象,显示输入非法

5.3子网掩码地址的第一字段不是255,显示输入非法

5.4得出结果——ip属于subnet

5.5得出结果——ip不属于subnet

分析:

其实就是利用split()将用户手动输入的ip地址和subnet_mask以“.”为界限分为四个小段,并将它们赋值给String类,然后分别将它们转化为int类型,逐段相与,再将相与得到的四小段以“.”为分隔符“拼接”起来,最后一步是将最后得到的这一字符串与之前输入的subnet比较,如果相同则该ip地址输入subnet。

6感悟与体会

这次最大的体会就是要找对方法,起初也是一头雾水,写了几行代码发现其实一点进度都没有,冷静下来仔细思考之后其实并不难。

判断一个ip地址是否属于一个子网,就是要将ip地址和子网掩码转化为二进制后相与,看得到的结果是否和子网相同,相同则属于。

但是在这过程中还是绕了不少弯路。

首先就是我们手动输入的地址,我们看到的虽是数字,但实际上是一串字符,所以我首先想到的是如果想进行与运算还是要将String类转化为int类。

但是因为地址中间有三个“.”,因此在这之前还必须将这串字符正确划分。

通过上网我查询到了split()这一用法,对我做这个实验的帮助非常大!

而且非常简单易懂。

然后就是一些细节问题,比如说将ip和子网掩码的四个小段逐段相与之后得到的四个小段是int类,我们必须将这四个小段连接起来,中间添加连接符“.”。

这个过程我觉得很简单,所以就想都没想就直接写了,但是编译之后却发现无论怎么输入显示的结果都是“不属于”,经过检查才发现原来是“.”的位置不当引起的,后来还是脚踏实地的用笔在纸上确认了一下步骤才最终运行调试成功。

7参考文献

1.《计算机网络》谢希仁主编

2.XX百科——split函数的用法

 

本科课程论文评分标准

 

班级

软件工程1002

学号

0121010680221

姓名

王思腾

论文题目

IP地址的合法性及子网判断

评阅点

评分标准(细则)

分值

给分

功能及算法

(40分)

正确实现本程序所需全部功能,算法设计正确合理且有一定创意

40分

实现所需功能,算法正确

30分

基本实现所需功能

15分

有明显重大错误

5分

无法实现程序功能

0分

界面和操作性

(20分)

界面美观、合理,可操作性强

20分

界面合理,可操作

15分

界面尚可,基本可操作

10分

可操作较差

5分

程序可读、可维护性

(15分)

程序可读性好、逻辑清晰,程序完整,可维护性好,

15分

程序可读、可维护

10分

基本可读可维护

5分

逻辑混乱、不可读

0分

论文质量

(25分)

论文规范,行文流畅,层次清晰

25分

论文书写基本规范,文理较通畅

20分

结构较合理,层次较清楚,基本符合要求

15分

结构混乱,文不对题目,或者有明显抄袭现象

5分

总分

 

教师签名:

 

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

当前位置:首页 > 解决方案 > 学习计划

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

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