检查ip地址和子网掩码的有效性
来源:互联网 发布:淘宝新开网店怎么推广 编辑:程序博客网 时间:2024/04/28 19:40
不说废话:
1、检查ip的有效性
int isIpValid(const char *ip){int ipPartArr[IP_PARTS_CNT] = {0};assert(ip);/* 格式化ip */if (IP_PARTS_CNT != sscanf(ip, "%d.%d.%d.%d",&ipPartArr[0], &ipPartArr[1], &ipPartArr[2], &ipPartArr[3])){return 0;}/* 检查各段取值范围 */if (((ipPartArr[0] <= IP_NUM_0) || (ipPartArr[0] > IP_NUM_255))|| ((ipPartArr[1] < IP_NUM_0) || (ipPartArr[1] > IP_NUM_255))|| ((ipPartArr[2] < IP_NUM_0) || (ipPartArr[2] > IP_NUM_255))|| ((ipPartArr[3] < IP_NUM_0) || (ipPartArr[3] > IP_NUM_255))){return 0;}else{return 1;/* valid */}}
2、检查子网掩码的有效性
int isMaskValid(const char *mask){int maskPartArr[IP_PARTS_CNT] = {0};const int validMaskPartArr[]= {0X00, 0X80, 0XC0, 0XE0, 0XF0, 0XF8, 0XFC, 0XFE, 0XFF};/* 有效的子网掩码取值 */int i = 0;int has_zero = 0;assert(mask);/* 格式化mask */if (IP_PARTS_CNT != sscanf(mask, "%d.%d.%d.%d",&maskPartArr[0], &maskPartArr[1], &maskPartArr[2], &maskPartArr[3])){return 0;}/* 检查各段mask取值是否有效 */for (i=0; i<IP_PARTS_CNT; ++i){if (!isMaskInRange(maskPartArr[i], validMaskPartArr, MASK_PART_VALID_CNT))return 0;/* 取值无效 *//* 子网掩码由一段连续的1和一段连续的0组成,出现0之后绝不可再出现1 */if (0 == has_zero && 0XFF != maskPartArr[i])/* 首次出现0 */{has_zero = 1;continue;/* 检查下一段 */}if (1 == has_zero && 0X00 != maskPartArr[i])/* 在出现0的情况下,又出现了1 */return 0;}return 1;}其中isMaskInRange用于检查各段mask取值是否有效,定义如下:
/* 检查各段mask的取值是否有效 */int isMaskInRange(int mask, const int validMaskPartArr[], int parts_cnt){int i = 0;int ret = 1;/* 默认有效 */assert(validMaskPartArr);for (i=0; i<parts_cnt; ++i){if (mask == validMaskPartArr[i])break;}if (i >= parts_cnt)/* 没有找到,无效取值 */ret = 0;return ret;}
3、下面是测试代码:
/* 测试ip的有效性 */void test_isIpValid(void){printf("Begin test isIpValid...\n");assert(1 == isIpValid("1.2.3.4"));assert(1 == isIpValid(" 133.133.133.133"));assert(0 == isIpValid("1a.1.c1.1"));assert(0 == isIpValid("123.1..1"));assert(0 == isIpValid("0.1.2.3"));assert(0 == isIpValid("122.1.256.3"));printf("End test isIpValid, successfully!\n");}/* 测试mask的有效性 */void test_isMaskValid(void){printf("Begin test isMaskValid...\n");assert(1 == isMaskValid("0.0.0.0"));assert(1 == isMaskValid("255.0.0.0"));assert(1 == isMaskValid("255.255.255.255"));assert(0 == isMaskValid("255.0.255.0"));assert(0 == isMaskValid("255.123.0.0"));assert(0 == isMaskValid("255.248.255.0"));assert(0 == isMaskValid("255.256.0.0"));printf("End test isMaskValid, successfully!\n");}
- 检查ip地址和子网掩码的有效性
- IP地址和子网掩码
- IP地址和子网掩码
- IP地址和子网掩码
- IP地址和子网掩码
- IP地址和子网掩码
- IP地址和子网掩码
- IP地址和子网掩码
- IP地址和子网掩码
- IP地址和子网掩码
- js判断ip地址,子网掩码,网关的逻辑性检查
- 检查代理ip的有效性
- IP地址和子网掩码的基础知识
- 子网掩码和ip地址的关系
- IP地址和子网掩码的验证
- IP地址和子网掩码的基础知识
- 子网掩码和ip地址的关系
- IP地址和子网掩码的作用是什么
- web.xml中url-pattern的3种写法
- Help > "About Oracle Application"里的信息不全
- 跟燕十八学习PHP-第六天-顺序&分支
- 我指间的刺青是对你的誓言
- html hr线的样式
- 检查ip地址和子网掩码的有效性
- Oracle中的Schema和User
- webkit中的javascript(1)---javascript函数调用在webkit中的实现
- java网网页返回图片的方法与说明
- 使用USB远程ssh登陆iOS设备,进行越狱开发
- 【PB】代码的发布及其安装程序的制作
- 为什么苹果公司不开放 iOS 输入法的 API?
- phpcms v9 list列表页调用文章详情内容
- 有高人遇到这样的提示没“Could not launch 'app name'”?