ip地址的合法性及子网判断
IP地址合法性及子网判断
的用户接口,并将每天的学习情况如实进行记录,课设结束时向老师和其
他小组讲解设计方案,演示实现结果,并汇报分工情况。
主要参考资料:
王小科 吕双 C#从入门到精通[M],北京:清华大学出版社,2008。
寇晓蕤 罗军勇 蔡延荣 网络协议分析[M],北京:机械工业出版社,2009
谢希仁 计算机网络[M],北京:电子工业出版社,2010
12
周五,展示本周课程设计的成果,提交课程设计文档。
六、 心得体会
为期一周的课程设计即将结束,在这一周的课程设计的过程中,无论 是在学习方面,还是在团队合作方面,我都收获了很多东西。在学习方面, 通过上网和到图书馆查阅资料,我更加深入的学习了 C#高级程序开发语 言,并利用所学知识设计,完成本次课程设计。在团队合作方面,一个人 思考问题总是存在漏洞的,在和队友的合作中,充分体现了团队的力量。 并且,在平时和更多的同学在一起探讨,分析,尽量把所有的情况考虑完 全,使得程序设计的更加完善。
if (System.Text.RegularExpressions.Regex.IsMatch(ip, pattrn)) {
return true; } else {
return false; } }
调用函数判断,并过滤全 0 全 1 的情况:
编写一个判断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地址判断,子网判断,掩码判定
学号: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 长度为 14 位因 此允许有 214=16384 个不同的 B 类网络,实际允许连接 16382 个网络。 C 类 IP 地址适合用
于一些小公司与普通的研究机构。
(二)、特殊的 IP 地址形式
1.直接广播地址
A 类、B 类、C 类 IP 地址中主机号全 1 的地址称为直接广播地址,用来使路由器将一个
-3-
《计算机网络》课程设计报告
设计思路
(一)、IP 地址
所谓 IP 地址就是给每个连接在 Internet 上的主机分配的一个 32bit 地址。按照 TCP/IP
协议,协议规定,IP 地址用二进制来表示,每个 IP 地址长 32bit,比特换算成字节,就
是 4 个字节。为了方便人们的使用,IP 地址经常被写成十进制的形式,中间使用符号“.”
分组以广播方式发送给特定网络上的所有主机。直接广播地址只能作为分组中的目的地址。
物理网络采用的是点—点传输方式,分组广播需要通过软件来实现。
2.受限广播地址
网络号与主机号的 32 位全位 1 的地址为受限广播地址,用来将一个分组以广播方式发
送给本网的所有主机。本网的所有主机将接受该分组,路由器则阻挡该分组通过。
关键词:IP,子网掩码,网络号
一.背景概述
随着 IT 行业的发展,计算机与网络越来越离不开大家,但是对计算机机的网络设置确 惹得大家苦恼,IP 地址的计算判断,诸多麻烦事,为解决此问题,进行了本程序的编写。
二.设计内容
判断一个 IP 地址是否合法,并判断该地址是否属于一个给定子网。
三.设计要求
在掌握 IP 地址的表示方法以及子网划分方法的基础上,并以计算机网络中关于 IP 地址 的相关理论知识为基石,运用 JAVA 语言按如下要求完成程序。
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地址的合法性判断方法和子网检测方法,深入理解IP地址和子网的概念,并能够灵活应用于实际网络环境。
二、实验原理:1.IP地址的合法性判断:IP地址是由32位二进制数组成的,采用点分十进制表示法,每8位二进制数组成一段,共4段。
合法的IP地址必须满足以下条件:-每一段的值在0~255之间;-每一段不能以0开头,除非该段的值为0;-每一段不能以255结尾。
2.子网检测:子网是将IP地址划分为多个子网,用于实现网络的划分和管理。
子网检测的核心是判断两个IP地址是否在同一子网内。
判断方法如下:-将两个IP地址与子网掩码进行与运算,得到的结果即为网络地址;-判断两个网络地址是否相同,若相同,则处于同一子网内。
三、实验步骤:1.IP地址合法性判断:-读入一个IP地址;-将IP地址进行切割,得到4段数字;-判断每一段数字是否在0~255之间;-判断每一段是否以0开头或以255结尾;-若所有判断条件均满足,则判定该IP地址为合法地址。
2.子网检测:-读入两个IP地址和一个子网掩码;-将两个IP地址与子网掩码进行与运算,得到两个网络地址;-判断两个网络地址是否相同;-若相同,说明两个IP地址处于同一子网内;-若不同,说明两个IP地址处于不同子网内。
四、实验结果:1.IP地址合法性判断:-输入合法IP地址:192.168.1.1,结果为合法地址;-输入非法IP地址:256.1.1.1,结果为非法地址。
2.子网检测:-输入两个IP地址:192.168.1.10、192.168.1.20,子网掩码为255.255.255.0,结果为处于同一子网内;-输入两个IP地址:192.168.1.10、192.168.2.10,子网掩码为255.255.255.0,结果为处于不同子网内。
五、实验总结:通过本次实验,我们掌握了IP地址的合法性判断方法和子网检测方法。
IP地址的合法性及子网判断
第三章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.1123.23¥.2.1123.2345.2.1123.23.45.2.13)判断掩码的合法性。
4)在IP地址合法的前提下,判断ip_addr是否属于子网subnet.5)输出命令行中的ip是否合法,掩码是否合法(可适当给出不合法原因)以及ip_addr是否属于子网subnet。
A类,B类与C类IP地址中主机号权1的地址chengweizhijieguangbo地址,用来使路由器将一个分组以广播方式发送给特定网络上的所有主机。
直接广播地址只能作为分组中的目的地址。
物理网络采用的使点-点传输方式,分组广播需要通过软件来实现。
2)受限广播地址网络号与主机号的32位全为1的地址为受限广播地址,用来将一个分组以广播方式发送给本网的所有主机。
本网的所有主机将接受该分组,路由器则阻挡该分组通过。
3)“这个网络上的这台主机”地址4)”这个网络上的特定主机”主机或路由器向本网络上的某个特定的主机发送分组,网络号部分为全0,主机号为确定的值。
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地址合法性判断及子网判断课设
课程设计任务书连续两个•含有非法字符每部分长度超过3含有超过三个的•每部分大于255内容及要求:判断IP 和子网是否合法,接着将IP 地址一位位与子网掩码做与运算,看结果是否和子网相等来判断IP 地址是否属于某一个网络。
设计总要求:实现判断输出命令行中的IP 是否合法,掩码是否合法以及ip_addr 是否是 属于子网sub net 。
将IP 地址一位位与子网掩码做与运算,看结果是否和子网相 等来判断IP 地址是否属于某一个网络。
在这个设计中考虑到了以上的种种情况, 根据用户输入的IP 地址,掩码和子网,程序可以判断输入的IP 地址,掩码和子 网是否正确以及ip_addr 是否是属于子网sub net 。
在判断不合法IP 时要考虑全面,比如以下情况均属于不合法123 . . 2 . 1.2 123 . 23$ . 2 . 1 123 . 2345 . 2 . 1 123 . 23 . 45 . 2. 1 256.123.3.3进度安排:第1周:布置课程设计任务;查阅资料;分组进行程序设计。
第2周:程序设计和调试;程序验收;答辩;上交课程设计报告目录一课程设计目的和意义 ................................................................. 4.1 . 1设计目的 (4)1 . 2设计的意义................................................................. 4.二协议的内容说明,关键技术的说明 (6)2. 1 ip地址简介................................................................. 6.2. 2子网掩码简介.............................................................. 8.2. 3 ip地址的计算 .............................................................. 8.2. 4子网划分简介 (10)3. 1主程序设计................................................................ 1.13. 2验证ip地址合法性 (12)3 . 3验证ip是否属于某个子网 (13)3.4 代码........................................................................ 1.4 四程序的运行和调试结果. (26)运行结果 (26)五课程设计小结 (28)六参考文献 (29)一课程设计目的和意义1.1设计目的1 .加深对IP地址及sub net的认识;2 .了解IP地址的划分;3. 了解sub net的作用和产生因素,sub net的划分;4. 实际操作编写规则,匹配IP和sub net,加深理解1 . 2设计的意义1、有利于基础知识的理解通过《计算机网络》的学习,学生掌握了一些信息时代生存与发展必需的信息技术基础知识和基本技能,具备了在日常生活与学习中应用信息技术解决问题的基本态度与基本能力。
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地址分成了网络号和主机号两部分,设计者就必须决定每部分包含多少位。网络号的位数直接决定了可以分配的网络数(计算方法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_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地址是否合法,并判断该地址是否属于一个给定子网
目录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地址的合法性及子网判断#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地址的合法性及子网判断系(部)信息系学号专业计算机姓名班级 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地址是否合法的计算机程序并给出子网号学生专业班级学生姓名(学号)指导教师完成时间 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地址合法性及子网判断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(变长子网掩码)进行匹配,当给定子网的长度小于或等于该主机所在的网络地址长度时,说明在地址在给定的子网中,否则不在给定的自网中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九:IP地址的合法性及子网判断#include <iostream.h>#include <string.h>#include <stdlib.h>#include <ctype.h>//类结构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;elsecout <<"valid subnet:" <<subnet <<endl;//判断掩码是否合法if(!maskIsValid)cout <<"mask is invalid!" <<endl;elsecout <<"valid mask:" <<mask <<endl;//判断ip地址是否合法if(!ipIsV)cout <<"Ip address is invalid!" <<endl;elsecout <<"valid ip address:" <<ip <<endl;//判断ip地址是否属于子网if(subIsV && ipIsV && maskIsValid)belong();}//子网数,判断输入是否含有非数字字符bool ipTest::NoIllegalChar(char *ch){unsigned int i,k=0;for(i=0;i <strlen(ch);i++)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++){//不用检错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++){ //不用再检错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 <<" " <<ip <<" belongs to " <<subnetPlusMask <<endl;return;}//ip不属于subnetelsecout <<" " <<ip <<" doesn't belong to " <<subnetPlusMask <<endl; }。