linux c 判断字符串是否为ip地址

2024-12-03 23:15:31
推荐回答(3个)
回答1:

一般地可以通过正则表达式库进行检测

也可以手动进行检测


常见的ip地址是点分十进制的字符串形式

类似

192.168.1.1

10.2.4.1

这种

四个部分每个部分的最大值是255

所以正则表达式简单点可以是

(\d+\.){3}\d+

但这样并不能完全正确地匹配ip地址

如果所要匹配的文件中确定出现的类似字符串为ip地址的话就完全没有问题

准确点可以

(\d{1,3}\.){3}\d{1,3}

然后再对每个数字进行判断

判断是否超出了ip地址的范围


下面是一运念茄个简单的使用正则表达式的代码

#include 
#include 
#include 

int main(int argc,char **argv)
{
    char *s="192.168.1.1";
    pcre *code;
    int rc;
    int ovector[2*3];
    const char *errptr;
    const char *ip;
    int erroffet;
    char *p;
    char buf[20];

    code=pcre_compile("(\\d{1,3}\\.){3}\\d{1,3}",0,
            &errptr,&erroffet,NULL);

    if((rc=pcre_exec(code,NULL,s,strlen(s),0,0,ovector,2*3)) > 0)
    {
        pcre_get_substring(s,ovector,rc,0,&ip);
        snprintf(buf,20,"%s",ip);
        pcre_free_substring(ip);

        for(p=strtok(buf,".");p != NULL;p=strtok(NULL,"."))
     高仔 旁察  {
            if(atoi(p) > 255)
                goto end;
        }

        printf("正确ip!\n");
        return 0;
    }

end:
        printf("错误的ip!\n");

    pcre_free(code);

    return 0;
}

回答2:

rep='\d{1,2}|1\d\d|2[0-4]\团返碰d|25[0-5]'世悄
x=/^(#{rep})\.(#{rep})\塌谈.(#{rep})\.(#{rep})$/
p "ok!" if strTestIP =~ x

回答3:

#include
#include
#include
#include
#include <碧渣蔽errno.h>

int if_a_string_is_a_valid_ipv4_address(const char *str)
{
struct in_addr addr;
int ret;
volatile int local_errno;

errno = 0;
ret = inet_pton(AF_INET, str, &addr);
local_errno = errno;
if (ret > 0)
fprintf(stderr, "\"%s\" is a valid IPv4 address\n", str);
else if (ret < 0)
fprintf(stderr, "EAFNOSUPPORT: %s\n", strerror(local_errno));
else
fprintf(stderr, "\梁让"%s\" is not a valid IPv4 address\n", str);

return ret;
}