当前位置:文档之家› 网络课程报告IP地址的合法及子网判断

网络课程报告IP地址的合法及子网判断

网络课程报告IP地址的合法及子网判断
网络课程报告IP地址的合法及子网判断

网络课程报告IP地址的合法及子网判断

中国计量学院

现代科技学院

课程设计报告本

课程设计名称 IP地址的合法性及子网判断系(部)信息系学号

专业计算机姓名

班级 101 指导教师虞戟

2013 年 7 月 5 日

课程设计报告目录

中国计量学院现代科技学院课程设计报告P.1

IP合法性和子网的判断

一、设计的目的和要求

1.目的

掌握IP地址的分类,准确理解子网、掩码的概念,确切地明了IP地址的合法格式。并判断该地址是否属于一个给定的子网。判断IP地址属于A B C那类网。

2.要求

根据后面介绍的IP地址与子网划分的知识,编写程序判断IP地址的合法性及属于子网。

1)以命令行形式运行:

IPAddress subnet_address/mask ip_address

其中,IPAddress为程序名,subnet_address为子网地址,mask为掩码,ip_address为IP地址

2)判断IP地址属于A B C那类网。

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

在判断IP地址合法性时要自行编写代码,不要使用任何inet 函数。判断时要考虑各种情况,全面分析问题。

4)判断掩码的合法性。

譬如说mask的值为负数或者大与32,这时输入的掩码就不合法。

5)在IP地址合法,掩码合法以及子网号也合法的前提下,判断ip_addr是否属于subnet。

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

7)还可以判断子网号,主机号全0,全1问题。

1

中国计量学院现代科技学院课程设计报告P.2 二、设计任务

通过程序正确的实现对IP地址合理性的判断;当给定一IP地址时,本程序能实现对其IP地址、子网地址、掩码的合法性做出正确的判断,以及能判断该IP地址是否属于子网,和IP地址属于A B C哪类网络

三、设计方案分析

(一)总体设计

1.分别输入子网号、掩码和IP地址。

2.分别判断子网号、掩码和IP地址的基本格式是否合法。

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

4.如果三者的基本格式都合法,判断IP地址属于A B C哪类网

2

中国计量学院现代科技学院课程设计报告P.3

3

(程序流程图-1)

中国计量学院现代科技学院课程设计报告P.4 (二)模块设计

(模块流程图-2)

四、调试与运行

(一)调试中遇到的问题和解决办法

1.输入命令行进行运行时,却发现不管我们输入的子网地址是否合法,运

行结果都显示:subnet is invalid。我们分析了很久也找不到原因,无奈我们再一次寻求同学的帮助。他只是把整个程序大致浏览了一下就发现了错误,原来我们把char ip[15],char subnetPlusMask[18],char subnet[18],char TempIp[15]这几个变量设置成了私有变量,导致后面的程序不能访问。

2.输入192.168.1.0/24 192.168.1.55 显示出现不属于该子网,这是错误的。

然后在(iSubA&iMask)中发现了问题所在。

3.出现很多的地方少了},然后经过我详细的查找得以解决。

4

4.发现很多词语没有定义,然后经过查找发现定义类时,单词打错了。

中国计量学院现代科技学院课程设计报告P.5(二)运行说明

程序编译成功后,打开cmd,然后打入cd d:/kcsj/debug(程序生成的Debug 文件路径下),再进行打入TestIP(程序文件名)192.168.1.0/24 192.168.1.55(IPAddresssubnet_address/mask ip_address) ,然后会出现运行结果,查看IP地址IP地址、子网地址、掩码的合法性,以及能判断该IP地址是否属于子网,和IP地址属于A B C那类网络。

(三)运行效果展示

(1)在命令提示窗口中输入命令:TestIP 192.1/33 198.1.1;

TestIP 256.1.1.0/24 256.1.1.55

详细的判断IP地址、子网地址、掩码的合法性

5

中国计量学院现代科技学院课程设计报告P.6

TestIP 19.16.1.0/24 19.16.1.55

(2)在命令提示窗口中输入命令:

(3)在命令提示窗口中输入命令:

TestIP 192.16.1.0/24 168.125.168.192

6

中国计量学院现代科技学院课程设计报告P.7

TestIP 192.168.1.0/24 192.168.2.55

(4)在命令提示窗口中输入命令:

(5)在命令提示窗口中输入命令:TestIP 192.168.1.0/24 192.168.1.55

7

IP地址属于该子网,并且IP地址属于C类网

中国计量学院现代科技学院课程设计报告P.8

五、设计体会与建议

这次课程设计,我收获了很多东西。通过上网和到图书馆查阅资料,我更加深入的学习了C语言,并利用所学知识设计,充分锻炼,增强了我的程序设计能力,使我加深了对理论知识的理解和掌握。充分体会到了理论固然重要,如果没有实践去验证,那也只是停在理论层面上,它的现实意义将无法得到体现。所以,这次课程设计是理论与实践的结合,增强了我在这方面的能力。

通过这次课程设计,我更加深刻的理解了IP地址的合法性,IP地址与子网的从属关系,子网与子网掩码的关系。在判断IP地址是否属于一个子网时,我对IP地址的分类以及子网划分有了更加深刻的理解。

在这次课程设计的过程中,我遇到了很多问题,但经过老师和同学的帮助,我解决了这些问题,并学到了很多知识,在此,对老师和同学表示真挚的感谢。

8

附录一:参考文献

[1] 魏权龄.数据包络分析(DEA)[J].科学通报,2000,45(17):1793-1808.

[2] 张尧学,郭国强,王晓春,赵艳标。计算机网络与Internet教程[第2版]。清华大学出版社,2006,11。

[3] 谢希仁,计算机网络(第5版),电子工业出版社,2008-01

[4] 谢希仁,计算机网络释疑与习题解答,电子工业出版社,2011-04

[5] 谭浩强,C++程序设计,清华大学出版社,2004-06

中国计量学院现代科技学院课程设计报告P.9

附录二:源代码

#include

#include

#include

#include

#include

9

#include

using namespace std;

//ipTest类定义

class ipTest{

char ip[15]; //用于存放ip地址

char ip_Temp[15]; //用于存放ip地址

char subnet_mask[18]; //用于存放subnet_mask地址

char subnet[18]; //用于存放subnet地址

char subnet_Temp[18]; //用于存放subnet地址

int mask; //用于存放mask(1的个数)

bool maskIsValid; //用于判断的个数是否合适,或是否与subnet匹配

public:

ipTest(char *,char *); //自定义初始化类函数

~ipTest(){}; //析构函数

10

bool ipIsValid(char *); //判断ip是否合法

bool subnetIsValid(char *); //判断子网号subnet是否合法

bool NoIllegalChar(char *); //ip,subnet地址中非法字符的判断

bool maskIsMatSubnet(int,char *);//判断mask与subnet是否匹配

void AllJudgment(); //判断mask,subnet,ip的合法性问题

void print(); //判断ip是否为子网成员,并输出判断结果

void split(char *,int *); //把单个字符地址转换为十进制数值型地址(含四段)

int toBinary(int a); //十进制int型数据转换为二进制int型数据

char * toString(int *a);//把二进制int型数据转换为一个整体的二进制字符型数据

};

//main主函数

11

int main(int argc,char *argv[]) //自动读取数据

{

//cout<<"目录地址:"<

中国计量学院现代科技学院课程设计报告P.10

cout<<"subnet_mask : "<

cout<<"ip地址: "<

//判断段数是否输入合法

if(argc!=3) //argc表示输入的参数个数,无参数输入时,其值为,因为默认argv[0]总是有的

{

cout<<"输入非法!";

return 0;

12

}

else

{

//先简单判断subnet/mask的长度

if(strlen(argv[1])>18)

{

cout<<"subnet/mask 输入非法!";

system("pause");

return 0;

}

//先简单判断ip的长度

if(strlen(argv[2])>15)

{

cout<<"ip 输入非法!";

system("pause");

return 0;

}

}

ipTest test(argv[1],argv[2]); //实例化类,传

13

入两个参数

test.AllJudgment();//调用函数,判断mask,subnet,ip的合法性问题

system("pause");//系统暂停

return 0;

}

//构造函数

中国计量学院现代科技学院课程设计报告P.11

ipTest::ipTest(char *subnet_mask,char *ip) {

maskIsValid=true; //设置maskIsValid默认为合法

char temp[2];//定义变量

int i,len;

len=strlen(subnet_mask);

14

/*******************从subnet/mask中分离出subnet地址***************/

for(i=0;i

{

this->subnet[i]=subnet_mask[i];

this->subnet_Temp[i]=subnet_mask[i];

}

subnet_Temp[i]='\0';

subnet[i]='\0';

/**************************判断mask 是否为数值************************/

if((len-(i+1)<3&&len-(i+1)>0)) //判断mask是否为一/二位字节

{

if(len-(i+1)==1) //表明mask是一位

{

temp[0]=subnet_mask[i+1];

//判断字符是否为数值型字符

if(!isdigit(temp[0])) //isdigit()为库函

15

数,可以调用

{

cout<<"mask中含有非数字的非法字符,error!"<

maskIsValid=false; //mask不是数值,则设置为false

}

}

else if((len-3)==i) //表明mask是二位

{

temp[0]=subnet_mask[i+1];

temp[1]=subnet_mask[i+2];

if(!(isdigit(temp[0]) && isdigit(temp[1])))

{

cout<<"mask中含有非数字的非法字符,error!"<

中国计量学院现代科技学院课程设计报告P.12

16

相关主题
文本预览
相关文档 最新文档