ip地址的合法性及子网判断
- 格式:pdf
- 大小:666.24 KB
- 文档页数:19
一、实习题目编写一个判断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万多台。
学号: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周先修课程:操作系统,计算机网络适用专业:计算机,软件一、目的与要求通过一个实际网络协议或网络应用系统的分析与总体设计,综合运用所学知识,加深对网络知识理解和掌握。
#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地址合法性判断及子网检测一、实验目的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学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_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、有利于逻辑思维的锻炼程序设计是公认的、最能直接有效地训练学生的创新思维,培养分析问题、解决问题能力的学科之一。
即使一个简单的程序,从任务分析、确定算法、界面布局、编写代码到调试运行,整个过程学生都需要有条理地构思,这中间有猜测设想、判断推理的抽象思维训练,也有分析问题、解决问题、预测目标等能力的培养。
目录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地址合法性及子网判断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地址的合法性及子网判断#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 <<" " <<<。