一、简单说说

  • 最近在项目开发中用到的几个很实用的小函数推荐给大家,提高开发时间效率!话不多说,直接上代码哈 ~

IP合法检验函数

  • 凡是有一点点错误的IP地址统统卡死,哎,都是面向测试部编程的经验 !!!。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>#define  FALSE     0
#define  TRUE      1bool ip_check(const char *ip){int dots = 0;              //字符 . 的个数int setions = 0;           //ip每一部分总和(0-255)char ip_temp[16+1] = {0};  //IP缓存char *token = NULL;        //分割的字串strncpy(ip_temp, ip, sizeof(ip_temp));//IP备份token = strtok(ip_temp, ".");  //获取第一个子字符串while (token != NULL)  //继续获取其他的子字符串{printf("token:<%s>\n",token);if (strlen(token) > 3)  //每一个IP段长度不能大于3{return FALSE;}token = strtok(NULL, ".");}if (NULL == ip || *ip == '.'){return FALSE;  //排除输入参数为NULL, 或者一个字符为'.'的字符串}while (*ip){if (*ip == '.'){dots ++;if (setions >= 0 && setions <= 255)  //检查ip是否合法{setions = 0;ip++;continue;}else{return FALSE;}}else if (*ip >= '0' && *ip <= '9'){ /*判断是不是数字*/setions = setions * 10 + (*ip - '0'); /*求每一段总和*/} elsereturn FALSE;ip++;}if (setions >= 0 && setions <= 255)  /*判断IP最后一段是否合法*/{if (dots == 3){return TRUE;}}return FALSE;}int main()
{if (ip_check("1.01.255.0255") == TRUE){printf("is ip is ok!\n");}else{printf("is ip is err!!!\n");}return 0;
}

MAC合法检验函数

  • 说明一下mac地址的分隔符可能有所不同,改一下分隔符即可。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>#define  FALSE     0
#define  TRUE      1bool mac_check(const char *mac)
{int dots = 0;            //字0符 : 的个数char mac_temp[17+1] = {0}; //mac缓存char *token = NULL;  //分割字串if (NULL == mac || *mac == '.'){return FALSE;  //排除输入参数为NULL, 或者一个字符为':'的字符串}if(strlen(mac) != 17)  //长度判断{return FALSE;}strncpy(mac_temp, mac, sizeof(mac_temp));   //mac备份printf("mac:<%s\n>",mac);printf("mac_temp<%s\n>",mac_temp);token = strtok(mac_temp, ":");  //获取第一个子字符串while (token != NULL){printf("mac:<%s>\n",token);if (strlen(token)  !=  2)  //字串个数为2{return FALSE;}while (*token){printf("*token:<%c>\n",*token);if ('0' <= *token && *token <=  '9'){;}else if ('A' <= *token && *token <= 'F'){;}else if ('a' <= *token && *token <= 'f'){;}else{return FALSE;}token++;}token = strtok(NULL,":");dots++;}if (dots != 6)  // 字串的个数{printf("dots:<%d>\n",dots);return FALSE;}else{return TRUE;}
}int main()
{if (mac_check("BC:54:2F:BF:5E:,8") == TRUE){printf("is mac is ok!\n");}else{printf("is mac is err!!!\n");}return 0;
}

子网掩码合法检验函数 (位操作法)

  • 先验证是否为合法IP。
  • 再排除特殊子网掩码 “0.0.0.0” 是合法子网掩码,但不可设置,不可用。
  • 然后将掩码转化成32无符号整型,取反为000…00111…1,然后再加1为00…01000…0,此时为2^n,如果满足就为合法掩码。
bool mask_check(const char *mask)
{if(ip_check(mask) != FALSE){unsigned int b = 0, i, n[4];sscanf(mask, "%u.%u.%u.%u", &n[3], &n[2], &n[1], &n[0]);if (strcmp(mask,"0.0.0.0") == 0)  //"0.0.0.0" 是合法子网掩码,但不可设置,不可用。return FALSE;for(i = 0; i < 4; ++i) //将子网掩码存入32位无符号整型{b += n[i] << (i * 8);}b = ~b + 1;if((b & (b - 1)) == 0)   //判断是否为2^nreturn TRUE;}return FALSE;
}

子网掩码合法检验函数 (字符串查询法)

  • 此类方法虽简单明了,但是消耗CPU资源。
char rightmask[31][16] = {"255.255.255.255","128.0.0.0","192.0.0.0","224.0.0.0","240.0.0.0","248.0.0.0","252.0.0.0","254.0.0.0","255.0.0.0", "255.128.0.0","255.192.0.0","255.224.0.0","255.240.0","255.248.0.0","255.252.0.0","255.254.0.0","255.255.0.0", "255.255.128.0","255.255.192.0","255.255.224.0","255.255.240.0","255.255.248.0","255.255.252.0","255.255.254.0","255.255.255.0", "255.255.255.128","255.255.255.192","255.255.255.224","255.255.255.240","255.255.255.248","255.255.255.252" };bool mask_check(const char *mask)
{if (ip_check(mask) != true)  //首先是合法的IPV4地址{return FALSE;}for(int i=0; i<31; i++ )  //查找是否为正确的子网掩码{if(strcmp(mask,rightmask[i])==0){return TRUE;}}return FALSE;
}

看完后感觉得到帮助的小伙伴,要点点赞哦~
给笔者一些动力嘛!谢谢啦~

C语言检查IP、MAC、子网掩码合法函数 实用 码住喽!相关推荐

  1. C语言判断IP地址是否合法

    C语言判断IP地址是否合法 代码如下: /* * 函数功能:判断字符串是否为合法IP地址 * 函数类型:立即函数,调用后立即生效. * 函数形参: * const char* ip:需要判断的字符串 ...

  2. [转载]Mac地址、IP、子网掩码、网关、DNS(转)

    原文地址:Mac地址.IP.子网掩码.网关.DNS(转)作者:junming6385 MAC(Media Access Control, 介质访问控制)MAC地址是烧录在Network Interfa ...

  3. C语言:ip地址合法性检查

    C语言:ip地址合法性检查 1. 代码实现 1.1 说明 参考: 1. 代码实现 #include <stdio.h> #include <string.h> #include ...

  4. R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...

  5. php 获取ip mac,php获取IP、MAC地址函数

    参数$AiType取值:1:IP,2:MAC,3:IP+MAC 返回 return string:地址串 function GetClientAddr($AiType=0) { $sMac = &qu ...

  6. 网络协议系列三 - MAC地址/IP地址/子网掩码

    MAC/IP/子网掩码在网络中非常重要,只要有网络的地方必然都会涉及这三个概念. 一.MAC 每一个网卡都有一个6字节(48bit)的MAC地址(Media Access Control). 全球唯一 ...

  7. c#获取本地ip地址网关子网掩码_详细介绍winformC#获得Mac地址,IP地址,子网掩码,默认网关的代码实例(图)...

    下面小编就为大家带来一篇winform C#获得Mac地址,IP地址,子网掩码,默认网关的实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1. 添加程序集 2. 引 ...

  8. 【计算机网络 系列笔记】四、网络层(非专业都知道【IP地址 子网掩码 路由 V*N NAT】了,你呢?)

    计算机网络   一.概述.虚拟机网络的三种模式   二.物理层   三.数据链路层   --   五.待续- 四.网络层 1. 网络层提供的两种服务 (1)电信网:虚电路服务 (2)因特网:数据报服务 ...

  9. IP地址,子网掩码,默认网关,路由,形象生动阐述

    自己的Linux虚拟机已经分配了固定的IP地址(使用无线路由,用的是192.168.1.XX网段),公司的无线网络分配的IP地址是(10.51.174.XX网段) 所以当自己的电脑拿到公司,还想使用桥 ...

最新文章

  1. leetCode题解之反转二叉树
  2. 2sin30°在python中如何表示_如何在python中实现以下派生公式?
  3. DataArtisans战略联手阿里云 Apache Flink服务能力云化
  4. ubuntu14.04下 安装matlabR2015b遇到的一些问题及其解决方法
  5. java收集碎片_Thinking in Java 笔记碎片
  6. net472无法建立到信任_是否还会信任,那个曾经背叛过自己的人
  7. 信号与系统奥本海姆第二版课后习题答案与详解(免下载,附有知识总结)
  8. 华为手机USB连不上电脑的解决方法
  9. Spring5-完全注解开发【之】第一步,先实现功能(增删改查),再讲解陌生代码
  10. Unity方便查看日志的插件Reporter
  11. iOS10.3正式版发布:iOS10.3新功能有哪些? 韩俊强的博客
  12. 女程序员在公司受到的待遇有什么不一样?
  13. FUTEX_SWAP补丁分析-SwitchTo 如何大幅度提升切换性能?
  14. UML类图属性和相关关系
  15. 微信小程序,一个有局限的类似 React Native 轮子!
  16. 基于8086单片机的PWM调光(带汇编)
  17. python3---字符串
  18. 一个应届本科找工作的感想和体验(2)--实习篇
  19. Leetcode 1004
  20. 如何有效问问题(转贴)

热门文章

  1. html中怎么让盒子模型居中,通过box盒子模型给元素内容设置居中
  2. Linux进程和轻量级进程(LWP)
  3. 练习3-2,编写一个函数escape(s,t),将字符串t复制到字符串s中,并在复制过程中将换行符、制表符等不可见字符转换为\n、\t等相应的可见的转义字符序列。要求使用switch语句。
  4. java LPT1,java 打印机打印跟开钱箱
  5. 【原创】基于SpringBoot的同城生鲜门店配送系统(SpringBoot配送系统毕业设计)
  6. Office2019 VOL版本 自定义安装组件
  7. 关于一些Excel的快捷键总结
  8. Enigma密码机初级解析
  9. 冒泡排序与快速排序比较
  10. 测向交叉定位matlab,一种三维多站测向交叉定位算法