IP地址的合法性及子网判断 JAVA.docx
《IP地址的合法性及子网判断 JAVA.docx》由会员分享,可在线阅读,更多相关《IP地址的合法性及子网判断 JAVA.docx(16页珍藏版)》请在冰豆网上搜索。
![IP地址的合法性及子网判断 JAVA.docx](https://file1.bdocx.com/fileroot1/2022-10/1/768b0836-00cf-4c12-a454-3174f1075c3d/768b0836-00cf-4c12-a454-3174f1075c3d1.gif)
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.ou