第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/9/30 1:31:47 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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

3.1 课程设计目的

本设计要求编写程序,判断一个IP地址是否合法,并判断该地址是否属于一个给定子网。从而考察读者是否对IP地址概念及其子网划分有非常清楚的认识。

3.2 课程设计要求

在掌握IP地址表示方法及子网划分方法的基础上,按如下要求完成程序。 1) 命令行格式:ip_test subnet/mask ip_addr

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

例如,要测试的IP地址为202.113.16.10,子网号为为202.113.16.0,子网掩码为255.255.255.0,则命令行为ip_test 202.113.16.0、24 202.113.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。

A类,B类与C类IP地址中主机号权1的地址chengweizhijieguangbo地址,用来使路由器将一个分组以广播方式发送给特定网络上的所有主机。直接广播地址只能作为分组中的目的地址。物理网络采用的使点-点传输方式,分组广播需要通过软件来实现。

网络号 主机号全1 2)受限广播地址

网络号与主机号的32位全为1的地址为受限广播地址,用来将一个分组以广播方式发送给本网的所有主机。本网的所有主机将接受该分组,路由器则阻挡该分组通过。

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

全0 4)”这个网络上的特定主机”

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

网络号全0 5)回送地址

回送地址用于网络软件测试和本地进程间通信。TCP/IP协议规定网络号为127的分组不能出现在任何网络上;主机和路由器不能为该地址广播任何寻址信息。

127 任意值(通常取1) 主机号 3.3子网的划分

人们在早期设计与建设ARPAnet时,没有预料到网络的发展速度如此之快,应用范围如此之广。当时个人计算机与局域网尚未出现。所以,研究者在设计Internet地址的编址方案时,主要是针对大型机互联的网络结构。设计IP地址的最初目的是希望每个IP地址都能唯一地,确定地识别一个网络与一台主机,但是这种方法同时也存在着两个主要的问题,即IP地址的有效利用率和路由器的工作效率。

为了解决这个问题,人们提出了子网(subnet)和超网(supernet)的概念。子网就是将一个大的网络划分成几个较小的网络,而每一个小网络都有其自己的地址。超网就是将一个组织所属的几个C类网络合并成为一个更大地址范围的逻辑网络。

划分子网实际上就是在IP地质系统中增加一个层次。三级IP地址的表示方法为netID_subnet ID_host ID.第一级网络定义了网点的地址;第二级子网号

定义了物理子网;第三级主机号定义了主机和路由器到物理网络的连接。三级层次的IP地址,一个IP分组的路由选择的过程分为三步:第一步将分组转发给网点,第二步转发给物理子网,第三步转发给确切的主机。

当三级层次的IP地址提出后,一个很现实的问题是:如何从一个IP地址中提取出子网号。因此,提出了子网掩码(subnet mask)的概念。子网掩码有时也叫做子网掩码。

子网掩码表示方法:网络号与子网号置1,主机号置0.

如何判断某一IP地址是否属于某一子网呢?只需将二进制IP地址与子网掩码按位进行“与”运算。若“与”运算所得值与给定子网地址一致,则说明该IP地址属于给定的子网。

3.4 课程设计分析

1.程序大致流程

1)分别判断子网号,掩码和IP地址的基本格式是否合法。

2)如果三者的基本格式都合法,才调用判定“IP地址是否为子网成员”的函数。该函数同时判别子网号与掩码是否匹配,子网号为全0或全1,主机号为全0,全1.

2.核心代码及说明

1)判断IP地址是否合法。

一般来说,我们先检查最明显的错误。例如,可以先判断IP中”.”个数是否正确;接着,以“.”为标志将IP字符串按节分开;然后,看该IP是否为4段,再判断各节是否是0~255间的整数。关于网络号,主机号全0全1等问题要在后面结合子网掩码一起判断。

这里的关键是怎么将IP字符串以“.”为标志按节分开,这要用到函数strtok(char*strToken,const char*strDelimit).第一个参数是给定的串,第二个参数是分隔符集合,该函数的功能就是以strDelimit中包含的任意字符为分隔符,在strToken中寻找下一个token。每一次调用strtok后,都会在strToken中插入一个NULL字符,所以,如果要读取下一个token,接下来调用strtok时第一个参数用NULL。

char ch[]=“.”; //分隔符

char *token,*dot[4]; int iplen=0;

token=strtok(ip,ch); //以“。”标志将IP字符串按节分开 while(token!=NULL){ //循环进行,直到结束 dot[iplen]=token; //将分开的每段赋值给dot

iplen++;

token=strtok(NULL,ch); }

这样,IP串的每一段都放到dot数组里了,下面判断是否有非法字符,每一段的值是否在0~255之间,就很容易了。

2) 判断IP地址是否为子网成员,判断子网号与掩码是否匹配,以及子网号,主机号全0,全1问题(iSubA是子网号,iMask是掩码,iIPA是给定的IP地址)。

if((iSubA|iMask!=imask){ //说明sub与mask不匹配 cout<<”子网号与掩码不匹配,error!”<

if((iSubA^iMask)==0){ //说明子网号全1

cout<<”子网号全1,error!”<

if((iSubA&iMask)==0){ //说明子网号全0

cout<<”子网号全0,error!”<

if((iSubA)==(iIPA&iMask)){ //ip和掩码做“与”运算,结果和子网号比较

if((iIPA|iMask)==iMask){ //说明主机号全0 cout<<”主机号全0,error!”<

}

if((iIPA|iMask)==0xffffffff){ //说明主机号全1 cout<<”主机号全1,error!”<

cout<<””<

cout<<””<

实际上,我们可以对IP地址进行更细致的检查。前面给出的方法是根据“分隔符”给IP分段,其实这样做不太准确。因为这种做法不能找出202..113.25.99.这样的错误。要实现这种判断就不能简单地用strtok函数来给IP地址分段了。

另外,还可以根据所给地址判断该IP地址属于A,B,C中的哪类。

#include #include #include #include #include #include

class ipTest{ char ip[15]; char subnetPlusMask[18]; char subnet[18]; char TempIp[15]; char TempSub[18]; int mask; bool maskIsValid;

public:

搜索更多关于: IP地址的合法性及子网判断  的文档
IP地址的合法性及子网判断 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3pbci1esxl036aw5uk1h_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top