微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C语言检查IP、MAC合法函数 实用 码住喽!

一、简单说说

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

IP合法检验函数

  • 凡是有一点点错误的IP地址统统卡死,哎,都是面向测试部编程的经验 !!!。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

#define  FALSE     0
#define  TRUE      1


bool 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'); /*求每一段总和*/
         } else
             return 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      1

bool 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;
}

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐