ZBLOG

C语言 检查是否是合法的ipv4 地址或者ipv6地址或者ipv4 网段或者ipv6网段

在C语言中,可以使用正则表达式或字符串处理来检查是否是合法的IPv4地址、IPv6地址、IPv4网段或者IPv6网段。以下是一个示例函数,用于检查给定的字符串是否是合法的IPv4地址、IPv6地址、IPv4网段或者IPv6网段。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>

int isValidIPAddress(const char *ip) {
    regex_t regex;
    int ret;

    // 正则表达式模式,用于匹配IPv4和IPv6地址
    const char *pattern = "^(([0-9]{1,3}\\.){3}[0-9]{1,3})|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4})$";

    // 编译正则表达式
    ret = regcomp(&regex, pattern, REG_EXTENDED);
    if (ret != 0) {
        printf("Failed to compile regular expression.\n");
        return 0;
    }

    // 执行匹配
    ret = regexec(&regex, ip, 0, NULL, 0);

    // 释放正则表达式资源
    regfree(&regex);

    // 返回匹配结果
    return (ret == 0);
}

int isValidIPSubnet(const char *subnet) {
    regex_t regex;
    int ret;

     // 正则表达式模式,用于匹配IPv4网段和IPv6网段
     const char *pattern = "^(((\\d{1,3}\\.){3}\\d{1,3})|(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}))\\/\\d+$";

     // 编译正则表达式
     ret = regcomp(&regex, pattern, REG_EXTENDED);
     if (ret != 0) {
         printf("Failed to compile regular expression.\n");
         return 0;
     }

     // 执行匹配
     ret = regexec(&regex, subnet, 0, NULL, 0);

    // 释放正则表达式资源
    regfree(&regex);

    // 返回匹配结果
    return (ret == 0);
}

int main() {
    const char *ipv4 = "192.168.1.1";
    const char *ipv6 = "2001:db8::1234";
    const char *ipv4_subnet = "192.168.0.0/24";
    const char *ipv6_subnet = "2001:db8::/32";

    if (isValidIPAddress(ipv4)) {
        printf("%s is a valid IPv4 address.\n", ipv4);
    } else {
        printf("%s is not a valid IPv4 address.\n", ipv4);
    }

    if (isValidIPAddress(ipv6)) {
        printf("%s is a valid IPv6 address.\n", ipv6);
    } else {
        printf("%s is not a valid IPv6 address.\n", ipv6);
    }

   if (isValidIPSubnet(ipv4_subnet)) {
       printf("%s is a valid IPv4 subnet.\n", ipv4_subnet);
   } else {
       printf("%s is not a valid IPv4 subnet.\n", ipv4_subnet);
   }

   if (isValidIPSubnet(ipv6_subnet)) {
       printf("%s is a valid IPv6 subnet.\n", ipv6_subnet);
   } else {
       printf("%s is not a valid IPv6 subnet.\n", ipv6_subnet);
   }

    return 0;
}

这个示例程序使用了正则表达式来匹配IPv4地址、IPv6地址、IPv4网段和IPv6网段的格式。你可以根据自己的需求对正则表达式进行调整,并在代码中添加更多的验证逻辑来满足特定要求。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=2897

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?