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地址是否属于指定的子网。
- 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; }。