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

合集下载

编写一个判断IP地址是否合法的计算机程序并给出其子网号

编写一个判断IP地址是否合法的计算机程序并给出其子网号

一、实习题目编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号二、原理概述所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。

按照TCP/IP协议规定,IP地址用二进制来表示,每个IP 地址长32bit,比特换算成字节,就是4个字节。

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

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

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

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

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

IP地址的长度为32位,用点分十进制表示,格式为x.x.x.x,每个x表示8位,每个x的值为0~255。

根据不同的取值范围,IP地址可以分为五类,IP地址中的前五位用于标识IP地址的类别,具体的分类规则如下:一个A类IP地址是指,在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。

如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。

A类IP地址中网络的标识长度为7位,主机标识的长度为24位,A类网络地址数量较少,可以用于主机数达1600多万台的大型网络。

A类IP地址地址范围1.0.0.1-126.255.255.254。

一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码,。

如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。

B类IP地址中网络的标识长度为14位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,每个网络所能容纳的计算机数为6万多台。

ip地址判断,子网判断,掩码判定

ip地址判断,子网判断,掩码判定

学号:0121210680225课程实践报告题目IP地址的合法性以及子网判断学院计算机科学与技术学院专业软件工程班级软件sy1201姓名李安福指导教师刘东飞2015 年 6 月15 日课程实践设计任务书学生姓名:李安福专业班级:软件sy1201 指导教师:刘东飞工作单位:计算机学院题目四: IP地址的合法性及子网判断初始条件:(1)学习相关知识(2)C/C++/VC/VB/JAVA语言(3)PC机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)在掌握IP地址表示方法及子网划分的基础上,按如下要求完成程序。

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

例如,要测试的IP地址为202.114.16.10,子网号为202.113.16.0,子网掩码为255.255.255.0,则命令行为ip_test 202.113.16.0/24 202.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.13)判断掩码的合法性。

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

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

时间安排:第一、二天:查阅资料,学习算法第三、四天:编程调试第五天:书写报告指导教师签名:年月日系主任(或责任教师)签名:年月日《计算机网络》)课程实践设计指导书课程编号:课程名称(中文/英文):《计算机网络》)课程实践设计周数/学分:1周先修课程:操作系统,计算机网络适用专业:计算机,软件一、目的与要求通过一个实际网络协议或网络应用系统的分析与总体设计,综合运用所学知识,加深对网络知识理解和掌握。

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

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

#include<iostream> #include<ctype.h> #include<math.h> #include<string> usingnamespace std; int a[4]={0,0,0,0}; charIp_addr[15]; char sub_net[15]; intip[4]={0,0,0,0}; intsubnet[4]={0,0,0,0}; int address[4]={0,0,0,0}; int num; // 判断 IP 是否合法 voidaa(char c[15]) { 15!"<<endl;// 分段存放子网//ip 地址// 子网// 分段存放 ip 地址 // 子网掩码// 判断 IP 地址不能超过 15 if(strlen(c)>15) {cout<<endl<<"IP 地址总长度不能超过return; }int dotnum=0;// 判断 IP 地址中是否存在非法字符for(int i=0;i<strlen(c);i++)1)!"<<endl;if(isdigit(c[i])==0 &&c[i]!='.')return ;if(c[i]=='.')dotnum++; }// 判断 IP 地址中只能存在 3 个分隔符if(dotnum!=3){ cout<<endl<<"IP 地址中分隔符只能为 3 个 !"<<endl;return; }// 判断 IP 地址中是否存在连续分隔符for(i=0;i<strlen(c)-1;i++){ if(c[i]=='.'&&c[i+1]=='.'){ cout<<endl<<"IP 地址中出现连续的分隔符return;}}}// 分割 IP 地址void bb(char c[15]){ // 判断 IP 地址中最后不能为分隔符for(int m=0;m<4;m++){ ip[m]=0; }int len;len=strlen(c); cout<<endl<<"IP 地址中含有非法字符 !"<<endl;!"<<endl; if(c[len-1]=='.'){ cout<<endl<<"IP 地址最后们不能为分隔符 return; }char temp[4][15];for(int i=0;i<4;i++)for(int j=0;j<15;j++)temp[i][j]='\0';int j=0;i=0;for(int k=0;k<strlen(c);k++){ if(c[k]!='.'){ temp[i][j]=c[k];j++;}else{ i++;j=0;} }for(i=0;i<4;i++)// 判断每位的长度len=strlen(temp[i]);if(len>3){ cout<<endl<<"IP 地址每位长度不能超过3!"<<endl;return;}switch(len){ case 3:{ while(len!=0){ ip[i]+=(temp[i][len-1]-48)*pow(10,3-len);len--; } break;}case 2:{ while(len!=0){ ip[i]+=(temp[i][len-1]-48)*pow(10,2-len); len--;}break; }default:{ while(len!=0){ ip[i]+=(temp[i][len-1]-48)*pow(10,1-len);255!"<<endl; !"<<endl;len--;}} } }long int num=0;for(i=0;i<4;i++){ // 判断每位的大小不超过 255if(ip[i]>255){ cout<<endl<<"IP 地址数字不能超过return;} }}// 分割网络地址void ee(char c[15]){ // 判断网络地址中最后不能为分隔符for(int m=0;m<4;m++){ subnet[m]=0; }int len;len=strlen(c);if(c[len-1]=='.'){ cout<<endl<<"子网号最后们不能为分隔符return;}3!"<<endl; char temp[4][15];for(int i=0;i<4;i++)for(int j=0;j<15;j++)temp[i][j]='\0';int j=0;i=0;for(int k=0;k<strlen(c);k++){ if(c[k]!='.'){ temp[i][ j]=c[k];j++;}else{ i++;j=0;}}for(i=0;i<4;i++){ // 判断每位的长度len=strlen(temp[i]);if(len>3){ cout<<endl<<"子网号每位长度不能超过return;switch(len){ case 3:{ while(len!=0){ subnet[i]+=(temp[i][len-1]-48)*pow(10,3-len);len--;}break;}case 2:{ while(len!=0){ subnet[i]+=(temp[i][len-1]-48)*pow(10,2-len);len--;}break;}default:{ while(len!=0){ subnet[i]+=(temp[i][len-1]-48)*pow(10,1-len);len--;}255!"<<endl;} }long int num=0;for(i=0;i<4;i++) { // 判断每位的大小不超过 255if(subnet[i]>255){ cout<<endl<<"子网号数字长度不能超过return;}}}// 生成子网掩码void cc(){ cout<<"子网掩码为: ";int r[32];for(int i=0;i<num;i++){ r[i]=1; }for(int j=0;j<32-num;j++) { r[i++]=0; } int p=0;int w[8];int k=0;for(int m=0;m<4;m++){ int sum=0;for (int n=0;n<8;n++){ w[p]=r[k];sum=sum+w[p]*pow(2,7-n);p++;k++;}p=0;a[m]=sum;}for(int n=0;n<4;n++){ cout<<a[n];if(n!=3){ cout<<"."; }}cout<<endl;}// 判断是否和子网相等void dd(){ string s="";for(int i=0;i<4;i++){ if((a[i]&ip[i])==subnet[i]){ s=s+"a";// 如果存在 4 个 a cout<<"结果:";{ cout<<" 属于同一子网!"<<endl;if(s=="aaaa"){ cout<<" 不属于同一子网!"<<endl;void main(){ cout<<" ************IP 地址的合法性及子网的判断*************"<<endl;elsecout<<" 设计成员XXX XX X"<<endl;char jj='y';while(jj!='n')cout<<"请输入IP 地址:";cin>>Ip_addr;cout<<"请输入连续 1 的个数:";cin>>num;cout<<"请输入子网号:"cin>>sub_net;cout<<"IP 地址为:";。

IP地址合法性判断及子网检测_实验报告

IP地址合法性判断及子网检测_实验报告

IP地址合法性判断及子网检测_实验报告实验报告-IP地址合法性判断及子网检测一、实验目的1.了解IP地址的基本知识和表示方法;2.掌握判断IP地址合法性的方法;3.掌握网络子网的划分方法;4.通过实验掌握子网掩码的设置方法。

二、实验器材1.一台安装有操作系统的计算机;2.网络连接线。

三、实验原理1.IP地址的基本知识IP地址是互联网协议指定的32位二进制数字,一般采用四个十进制数(0~255)表示,每个数之间使用“.”分隔。

例如:192.168.1.1、IP地址可以分为两部分,网络地址和主机地址。

网络地址用于标识网络,主机地址用于标识网络中的主机。

2.IP地址合法性判断方法IP地址的每个数必须在0~255的范围内,且IP地址的格式必须满足“N1.N2.N3.N4”的形式,N1、N2、N3和N4分别表示IP地址的四个数字段。

在判断IP地址的合法性时,需要判断每个数字段的值是否在0~255之间。

同时,IP地址的每个数字段之间需要用“.”分隔,且不能有其他的字符。

3.子网划分方法子网划分是将一个大的IP地址段划分成多个小的IP地址段的过程。

子网划分的目的是将一个大的网络划分成若干个小的网络,增加网络的可管理性和安全性。

子网掩码是用于划分子网的重要参数,用于将IP地址划分为网络地址和主机地址。

子网掩码是一个32位的二进制数字,一般采用四个十进制数表示,例如:255.255.255.0。

子网掩码规定了IP地址前面的网络地址的长度。

四、实验内容1.判断一个给定的IP地址是否合法;2.给定一个IP地址和子网掩码,判断该IP地址是否属于指定的子网。

五、实验步骤1.判断IP地址的合法性。

编写程序,输入一个IP地址,判断该IP地址是否合法。

(1)将IP地址按照“.”进行分割,得到四个数字段;(2)判断每个数字段的值是否在0~255之间;(3)判断数字段之间是否使用“.”进行分隔。

2.判断IP地址是否属于指定子网。

编写程序,输入一个IP地址和子网掩码,判断该IP地址是否属于指定的子网。

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

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

IP地址的合法性及子网判断-JAVA学0121010680221号:课程设计题目IP地址的合法性及子网判断学院计算机科学与技术学院专业软件工程班级1002姓名王思腾指导教师刘东飞2013 年 6 月19 日目录1任务书 (3)2相关知识 (4)3课程设计分析 (6)4 程序清单及注释 (9)5 运行结果分析及结论 (12)6 心得感悟。

147 参考文献 ............................................ 错误!未定义书签。

课程设计任务书学生姓名:王思腾专业班级:软件1002班指导教师:刘东飞工作单位:计算机学院题目四: IP地址的合法性及子网判断初始条件:(1)学习相关知识(2)C/C++/VC/VB/JAVA语言(3)PC机一台要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)在掌握IP地址表示方法及子网划分的基础上,按如下要求完成程序。

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

例如,要测试的IP地址为202.114.16.10,子网号为202.113.16.0,子网掩码为255.255.255.0,则命令行为ip_test 202.113.16.0/24 202.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.13)判断掩码的合法性。

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

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

ip地址的合法性及子网判断
有人会以为,一台计算机只能有一个IP地址,这种观点是错误的。我们可以指定一台计算机具有多个IP地址,因此在访问互联网时,不要以为一个IP地址就是一台计算机;另外,通过特定的技术,也可以使多台服务器共用一个IP地址,这些服务器在用户看起来就像一台主机似的。
将IP地址分成了网络号和主机号两部分,设计者就必须决定每部分包含多少位。网络号的位数直接决定了可以分配的网络数(计算方法2^网络号位数);主机号的位数则决定了网络中最大的主机数(计算方法2^主机号位数-2)。然而,由于整个互联网所包含的网络规模可能比较大,也可能比较小,设计者最后聪明的选择了一种灵活的方案:将IP地址空间划分成不同的类别,每一类具有不同的网络号位数和主机号位数。
1.A类IP地址
一个A类IP地址由1字节的网络地址和3字节主ห้องสมุดไป่ตู้地址组成,网络地址的最高位必须是“0”, 地址范围1.0.0.1-126.255.255.254(二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110)。可用的A类网络有126个,每个网络能容纳1600多万个主机。
3.4 子网划分简介
子网的划分,实际上就是设计子网掩码的过程。子网掩码主要是用来区分IP地址中的网络ID和主机ID,它用来屏蔽IP地址的一部分,从IP地址中分离出网络ID和主机ID.子网掩码是由4个十进制数组成的数值"中间用"。"分隔,如255.255.255.0。若将它写成二进制的形式为:11111111.11111111.11111111.00000000,其中为"1"的位分离出网络ID,为"0"的位分离出主机ID,也就是通过将IP地址与子网掩码进行"与"逻辑操作,得出网络号。

IP合法性子网判断

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地址的合法格式。

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

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

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

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

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

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

计算机网络课设--------判断一个IP地址是否合法,并判断该地址是否属于一个给定子网

计算机网络课设--------判断一个IP地址是否合法,并判断该地址是否属于一个给定子网

目录1 课程设计目的 (1)2 课程设计要求................ 错误!未定义书签。

3 相关知识 (1)4 课程设计分析 (3)4.1程序大致设计过程 (3)4.2实验流程图.............. 错误!未定义书签。

5 程序代码.................... 错误!未定义书签。

6 运行结果与分析............. 错误!未定义书签。

17 参考文献................... 错误!未定义书签。

21课程设计目的本设计要求编写程序,判断一个IP地址是否合法,并判断该地址是否属于一个给定子网。

从而考察读者是否对IP地址概念及其子网划分有非常清楚的认识。

2 课程设计的要求根据介绍的IP地址与子网划分的知识,编写程序判断IP地址的合法性及所属子网。

(1)以命令行形式运行IPAddress subnet_address/mask ip_address其中,IPAddress为程序名,subnet_address为子网地址,mask为掩码,ip_address 为IP地址。

(2)输入内容:IP地址、子网地址与掩码是否合法,以及IP地址是否属于子网。

3 相关知识1.IP地址相关概念所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。

按照TCP/IP(Transport Control Protocol/Internet Protocol,传输控制协议/Internet协议)协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。

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

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

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

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

IP地址合法性及子网判断

IP地址合法性及子网判断

IP地址合法性及子网判断1实验目的1.加深对IP地址及subnet的认识;2.了解IP地址的划分;3. 了解subnet的作用和产生因素,subnet的划分;4. 实际操作编写规则,匹配IP和subnet,加深理解2实验环境2.1软件操作系统:Windows XP(Windows NT以上版本皆可)编程环境:Microsoft Visual C++ 6.0编程语言:C++测试环境:MS-DOS2.2硬件现阶段常见PC3实验原理该课程设计涉及的基本原理分两部分,一是IP地址合法的判断,二是是否属于一个给定子网的判断。

3.1 IP地址合法性判断第一种情况、IP地址格式输入不合法时,要过滤掉全部情况,例如输入的为一串字符等;第二种情况、就是IP地址格式输入合法时,要过滤掉一些特殊的地址,如全为0对应当前主机,而全为1时则是当前子网的有限广播地址,所以首先要过滤这两个地址;第三种情况、IP的值被分割成的四个值,对这四个值有统一的要求,就是0~255的整数,同时要考虑IP地址的第一个字节不能为0的情况,这个可以用正则表达式来进行匹配。

除此之外,还要判断输入的子网掩码是否合法,计算出来的网络地址,主机地址是否合法。

3.1.1网络寻址规则①网络地址必须唯一。

②网络标识不能以数字127开头。

在A类地址中,数字127保留给内部回送函数。

③网络标识的第一个字节不能为255。

数字255作为广播地址。

④网络标识的第一个字节不能为“0”,“0”表示该地址是本地主机,不能传送。

3.1.2主机寻址规则a.主机标识在同一网络内必须是唯一的。

b.主机标识的各个位不能都为“1”,如果所有位都为“1”,则该机地址是广播地址,而非主机的地址。

c.主机标识的各个位不能都为“0”,如果各个位都为“0”,则表示“只有这个网络”,而这个网络上没有任何主机。

3.2子网判断子网判断的前提是要输入子网地址,在设计的过程中采用VLSM(变长子网掩码)进行匹配,当给定子网的长度小于或等于该主机所在的网络地址长度时,说明在地址在给定的子网中,否则不在给定的自网中。

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

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

ip地址的合法性及子网判断实验九:IP地址的合法性及子网判断#include#include#include#include//类结构class ipTest{char ip[15]; //定义ip数组,存放ip地址char subnetPlusMask[18]; //定义subnetPlusMask数组,存放子网号和子网掩码中1的个数char subnet[18]; //定义subnet数组,存放子网号char TempIp[15]; //定义TempIp数组,存放临时的ip地址char TempSub[18]; //定义TempSub数组,存放临时的子网号int mask; //定义整型mask,存放子网掩码中1的个数bool maskIsValid;//定义布尔值maskIsValid,存放判断mask真值的变量public:ipTest(char *,char *); //定义ipTest函数ipTest(){};bool NoIllegalChar(char *); //非法字符的判断bool ipIsValid(char *); //判断IP地址是否合法bool subnetIsValid(char *); //判断子网号是否合法void belong(); //判断IP是否为子网成员print();//定义输出函数print};//主函数void main(int argc,char *argv[]){if(argc != 3){ //判断参数格式是否正确cout <<"Please input command: ip_test subnet/mask ip" ;return;}else{if(strlen(argv[1]) > 18){ //先判断最简单的错误,子网号及子网掩码长度和是否超出cout <<"subnet/mask is too long";return;}if(strlen(argv[2]) > 15){ //ip地址长度是否超出cout<<"ip Address is too long";return;}ipTest test(argv[1],argv[2]); //实例化ipTest类test.print(); //完成相应判别并输出结果}}//构造函数ipTest::ipTest(char* subnetPlusMask,char *ip){maskIsValid = true;char temp[2];//把'/'前的字符复制到subnet字符数组中int smLen = strlen(subnetPlusMask); // 定义smLen为subnetPlusMask的长度for(int i = 0;i < smLen && subnetPlusMask[i] != '/';i++)this->subnet[i] = subnetPlusMask[i]; //对subnet数组赋值,值为subnetPlusMask中的数值this->TempSub[i] = subnetPlusMask[i]; //对TempSub数组赋值,值为subnetPlusMask 中的数值}subnet[i] = '\0';//给数组加上结束符TempSub[i] = '\0'; //给数组加上结束符if(i >= smLen-2){ //初始化mask和maskIsValidif(i == smLen-2){temp[0] = subnetPlusMask[i+1];if(!isdigit(temp[0])) //判断temp中的值是否为字符maskIsValid = false;}else{if(i == smLen-3){temp[0] = subnetPlusMask[i+1];temp[1] = subnetPlusMask[1+2];if(!(isdigit(temp[0])&&isdigit(temp[1]))) //判断temp中的值是否为字符maskIsValid = false;}}mask = atoi(temp); //将temp中的字符数值化if(mask <0 || mask >32) //判断mask值是否超出范围maskIsValid = false;else //用十进制数表示的掩码中1的个数只能是一位数或者两位数maskIsValid = false;strcpy(this->subnetPlusMask,subnetPlusMask); //给subnetPlusMask赋值strcpy(this->ip,ip); //给IP赋值strcpy(this->TempIp,ip);}//调用判别函数,并输出结果ipTest::print(){bool subIsV = subnetIsValid(TempSub);bool ipIsV = ipIsValid(TempIp);//判断子网是否合法if(!subIsV)cout <<"subnet is invalid!" <<endl;< p="">elsecout <<"valid subnet:" <<<endl;<="" p="">//判断掩码是否合法if(!maskIsValid)cout <<"mask is invalid!" <<endl;< p="">elsecout <<"valid mask:" <<<endl;<="" p="">//判断ip地址是否合法if(!ipIsV)cout <<"Ip address is invalid!" <<endl;< p="">elsecout <<"valid ip address:" <<<endl;<="" p="">//判断ip地址是否属于子网if(subIsV && ipIsV && maskIsValid)belong();}//子网数,判断输入是否含有非数字字符bool ipTest::NoIllegalChar(char *ch){unsigned int i,k=0;for(i=0;i <strlen(ch);i++)< p="">if(isdigit(*(ch+i))==0)//判断每一位是否为数字字符return false;return true; //若不含有非法数字字符则返回true}//判别IP地址是否合法bool ipTest::ipIsValid(char * ip){char ch[]="."; //分隔符char *token,*dot[4];int iplen = 0;token = strtok(ip,ch); //以"."标志将IP字符串按节分开while(token!=NULL){ //循环进行,直到结束dot[iplen]=token; //将分开的每段赋值给dotiplen++;token = strtok(NULL,ch);}//判断IP地址的段数if(iplen != 4) //段数不对return false;for(int i = 0; i < 4; i++)if(!NoIllegalChar(dot[i])||atoi(dot[i])>255) //有非法字符或某段值非法return false;return true;}//判断子网号是否合法bool ipTest::subnetIsValid(char* subnet){if(!ipIsValid(subnet)) //调用判别IP地址合法性的函数return false;return true;}//判断IP是否为子网成员,判断子网号与掩码是否匹配,以及子网号、主机号全0全1问题void ipTest::belong(){int subLen = strlen(subnet);int ipLen = strlen(ip);unsigned int iIPA,iSubA,iMask;unsigned char subA[4],ipA[4];char temp[3];int i,j,t = 0;for (i = 0, j= 0;i <sublen;i++)< p="">{//不用检错if(subnet[i]!='.')temp[j++]=subnet[i]; //temp数组中放'.'间的串else{subA[3-t] = atoi(temp); //subA数组中放'.'间的数据j=0;t++;temp[0]=temp[1]=temp[2]='\0';}}subA[0]=atoi(temp);temp[0]=temp[1]=temp[2]='\0';iSubA=*(unsigned int *)subA; //iSubA中放subnet中'.'除外的串对应的数for(i=0,j=0,t=0;i <iplen;i++)< p="">{ //不用再检错if(ip[i]!='.')temp[j++]=ip[i];else{ipA[3-t]=atoi(temp);j=0;t++;temp[0]=temp[1]=temp[2]='\0';}}ipA[0]=atoi(temp);iIPA=*(unsigned int*)ipA; //iIPA中放IP中'.'除外的串对应的数//获得掩码iMask = 0xffffffff;iMask <<=(32-mask);if((iSubA | iMask)!= iMask){ //说明sub与mask不匹配cout <<"subnet and mask not match!" ;return;}if((iSubA^iMask)==0){ //说明子网号全1cout <<"subnet is all 1!" ; return;}if((iSubA&iMask)==0){ //说明子网号全0cout <<"subnet is all 0!" ; return;}if((iSubA)==(iIPA&iMask)) {//IP和掩码与,结果和子网号比较if((iIPA|iMask)==iMask){//说明主机号全0cout <<"Ip address is all 0!" ; return;}if((iIPA|iMask)==0xffffffff) {//说明主机号全1cout <<"Ip address is all 1!"; return;}//ip属于subnetcout <<" " <<<endl;<="" < return;}//ip不属于subnetelsecout <<" " <<<。

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

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

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

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

二、设计的意义1、有利于对基础知识的理解2、有利于逻辑思维的锻炼程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。

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

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

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

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

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

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

这当中就有一个严谨治学、一丝不苟的科学精神的培养。

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

1.在判断一个IP地址合法性时要自行编写代码,不要使用任何inet 函数2.命令行格式:ip_test subnet/mask ip_addrip_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/24 202.113.16.10。

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

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

网络课程报告IP地址的合法及子网判断中国计量学院现代科技学院课程设计报告本课程设计名称 IP地址的合法性及子网判断系(部)信息系学号专业计算机姓名班级 101 指导教师虞戟2013 年 7 月 5 日课程设计报告目录中国计量学院现代科技学院课程设计报告P.1IP合法性和子网的判断一、设计的目的和要求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地址的基本格式是否合法。

编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号

编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号

计算机网络与通信实习报告实习题目编写判断IP地址是否合法的计算机程序并给出子网号学生专业班级学生姓名(学号)指导教师完成时间 2010年5月21日实习(设计)地点信息楼139机房2010 年5月21日一、实验题目编写一个判断IP地址是否合法的计算机程序,如果合法,给出其子网号一、原理概述1.TCP/IP协议的网络层使用的地址标识符叫做IP地址,IP v.4中IP地址是一个32位的二进制地址。

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

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

IP位,每个x的值为0~255(例如202.133.29.119)。

根据不同的取值范围,IP地址可以氛围五类,IP地址中的前五位用于标识IP地址的类别,具体的分类规则如下:A类地址的第一位为0。

B类地址的第两位为10。

C类地址的第三位为110。

D类地址的第四位为1110。

E类地址的第五位为11110。

A位,因此每一个A类网络的主机IP数理论上为2^24=16777216,由于全0和全不能用,所以每一个A类网络的主机IP数为16777214。

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

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

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

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

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

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

三级IP地址的表示方法为net ID-subnet ID-host ID。

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

ip地址合法性及子网判断

ip地址合法性及子网判断
return 0; return 1;
} //二进制的字符串转换成十进制数 void ToMask(char *s,int *a) {
int i,j,k,t,temp; for(i=4;i>0;i--) {//划分成 4 个块
t=0;temp=0; for(j=8*i-1;j>=8*(i-1);j--) {//每块的 8 位二进数转换成十进制数
2. 课题分析与设计 (1)分析子网和 IP 地址的合法性 子网号和 IP 地址格式:X.X.X.X,其中 X 必须是 0~255,中间用点隔开,由四段组成。 全 0 和全 1 以及以 0 和 127 不可用,因此 X 不能全部为 0 和 255,且第一个 X 不能为 0 和 127。 先分离子网(subnet/mask),以“/”作为分界分离出子网号和子网掩码,然后使用字符 串存储子网号和 IP 地址。初次判断 X 包含的字符是否是 0~9 的字符,其个数是否处 于 1~3 之间,X 的个数是否为 4,点的个数是否为 3,X 与点是否交替出现,且 X 比 点先出现。然后将 X 转换成十进制数,再判断第一个 X 是否为 127,所有 X 是否全 部为 0 和 255。最后判断子网掩码是否为 1~31 之间,如果合法,再将其转换成点分 十进制形式。 (2)分析子网与 IP 地址的关系 将子网号,IP 地址分别和子网掩码相与,如果相与的结果相同,则 IP 地址属于子网, 否则 IP 地址不属于子网。
1
山东轻工业学院 信息学院 11-12 学年第 2 学期 2009 级计算机网络课程设计
(3)[程序流程]
3. 设计使用的技术介绍 (1)程序开发环境:Visual Studio2010 集成开发环境 (2)程序使用语言:C 语言

IP地址的分类和判断,标准子网掩码

IP地址的分类和判断,标准子网掩码

IP地址的分类和判断,标准子网掩码(2010-08-20 16:52:08)A类1.0.0.0 到126.0.0.00.0.0.0 和127.0.0.0保留B128.1.0.0到191.254.0.0128.0.0.0和191.255.0.0保留C192.0.1.0 到223.255.254.0192.0.0.0和223.255.255.0保留D224.0.0.0到239.255.255.255用于多点广播E240.0.0.0到255.255.255.254保留255.255.255.255用标准子网掩码A类网络(1~126)缺省子网掩码:255·0·0·0255·0·0·0 换算成二进制为11111111·00000000·00000000·00000000可以清楚地看出前8位是网络地址,后24位是主机地址,也就是说,如果用的是标准子网掩码,看第一段地址即可看出是不是同一网络的。

如21.0.0.0.1和21.240.230.1,第一段为21属于A类,如果用的是默认的子网掩码,那这两个地址就是一个网段的。

B类网络(128~191)缺省子网掩码:255·255·0·0C类网络(192~223)缺省子网掩码:255·255·255·0B类、C类分析同上。

基本的IP地址是分成8位一个单元(称为8 位位组)的32位二进制数。

二进制与十进制大家都懂吧。

为了方便人们的使用,对机器友好的二进制地址转变为人们更熟悉的十进制地址。

IP地址中的每一个8位位组用0~255之间的一个十进制数表示。

这些数之间用点(.)隔开,这是所谓的点-十进制格式。

因此,最小的IPv4地址值为0.0.0.0,最大的地址值为255.255.255.255,然而这两个值是保留的,没有分配给私人的端系统。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机网络课程设计报告题目:IP地址的合法性及子网判断学生姓名:学号:专业班级:同组姓名:指导教师:设计时间:指导老师意见:评定成绩:签名:日期:年月日目录一、课程设计目的和意义 (1)1.1设计目的 (1)1.2设计的意义 (1)二、课程设计的内容和要求 (2)三、课程设计的相关技术 (3)3.1 课程设计的运行环境 (3)3.2 IP地址相关概念和知识的回顾。

(3)3.3 特殊的IP地址形式 (4)3.4 子网的划分 (5)四、课程设计过程 (6)4.1程序大致设计过程: (6)4.2实验流程图 (6)五、部分程序运行结果 (9)六、课程设计小结 (11)七、参考文献 (12)附录一:源代码 (12)一、课程设计目的和意义1.1设计目的通过计算机网络课程设计,让我们学会处理几种常用计算机网络问题的基本处理方法,掌握计算机网络的基本原理,使我们在面对不断变化的技术时,具有跟踪,学习的基础与能力。

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

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

具体而言,关于”IP地址的合法性及子网判断”课程设计题目的目的是:用C/C++语言编写程序,以判断一个IP地址是否合法,并判断该地址是否属于一个给定的子网.从而能够考察我们对IP地址的概念,各类IP地址的区分以及子网划分的理解和掌握程度.1.2设计的意义1、有利于基础知识的理解通过计算机网络的学习,学生掌握了一些信息时代生存与发展必需的信息技术基础知识和基本技能,具备了在日常生活与学习中应用信息技术解决问题的基本态度与基本能力。

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

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

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

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

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

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

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

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

有助于严谨治学、一丝不苟的科学精神的培养,以及不怕失败、百折不挠品格的锻炼。

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

(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_test202.113.16.0/24 202.113.16.10。

(因为255.255.255.0是连续的24个1,所以用24表示)(2)判断subnet和ip_addr的合法性。

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

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

例如以下IP地址均不合法:123..2.1123.23$.2.1123.2345.2.1123.23.45.1(3)判断掩码的合法性。

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

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

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

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

三、课程设计的相关技术3.1 课程设计的运行环境C++是一种使用非常广泛的计算机编程语言。

C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。

它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格.本程序在Windows环境下利用C++语言编写,Microsoft Visual Studio 6.0进行编译。

Visual Studio是微软公司推出的开发环境,Visual Studio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和office插件。

3.2 IP地址相关概念和知识的回顾。

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

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地址的结构如下所示;A类IP地址结构适合用于有大量主机的大型网络。

由于主机号长度为24位,因此每个A类网络的主机IP数理论上为224=16777216。

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

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

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

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

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

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

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

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

(3)“这个网络上的这台主机”地址(4)“这个网络上的特定主机”地址主机或路由器向本网络上的某个特定的主机发送分组,网络号部分为全0,主机号为确定的值。

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

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

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

3.4 子网的划分人们在早期设计与建设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地址属于给定的子网。

四、课程设计过程4.1程序大致设计过程:1.分别判断子网号、掩码和IP地址的基本格式是否合法。

2.如果三者的基本格式都合法,才调用判定“IP地址是否为子网成员”的函数。

该函数同时判别子网号与掩码是否匹配,子网号为全0或全1,主机号为全0、全1.4.2实验流程图如下:1.主流程图图3-1 主流程图2.验证ip地址合法性流程图图3-2 验证ip地址合法性流程图3验证子网掩码合法性流程图图3-3 验证子网掩码合法性流程图4.验证ip是否属于某个子网流程图:开始输入ip地址,子网掩码和子网地址拆分ip地址与子网掩码拆分ip地址和子网掩码进行与运算N结果与子网比较Y结束图3-4 验证ip是否属于某个子网流程图五、部分程序运行结果程序主要运行界面:1)测试格式是否为三段格式如图:分析:程序要求是“程序名子网号/掩码 ip地址”格式而这里只有两端造成参数不匹配,出错!分析:虽然格式是三段、子网号无效且掩码是零,其IP地址还是合法的!2)简单判断子网号及掩码长度是否超出范围如图:分析:因为程序里设置的子网号和掩码字符串长度最多是18个字符而这里有20个字符大于18,所以出错!分析:程序中的IP地址字符串最长只有15个而程序中有17个字符大于15个,所以出错!3)测试Ip地址是否合法如图:分析:IP地址不符合格式要求!分析:IP地址段数不是四,所以出错!4)测试子网号与掩码是否匹配如图:分析:子网号转换为二进制:00000001 11000000 00000000 00000000 子网掩码转换成二进制:11111111 10000000 00000000 00000000 从以上可以看出子网号与子网掩码不匹配与输出结果是一样的说明程序算法是正确的!分析:子网号转换为二进制:00000001 10000000 00000000 00000000 子网掩码转换成二进制:11111111 10000000 00000000 00000000 从以上可以看出子网号与子网掩码匹配与输出结果是一样的说明程序算法是正确的!5)测试子网号是否全零或全一如图:六、课程设计小结这次课程设计,感触颇深!课程设计是学生考试前最后一个重要学习环节,是学习深化与升华的重要过程。

相关文档
最新文档