判断给定字符串是不是IP地址

判断给定字符串是不是IP地址

在昨天的博文里分享了一个 主机名 转化成 IP 地址的方法,具体参看昨天的文章:https://www.madbull.site/?p=2150

但是在使用之前,需要对提供的字符串做一个简单的识别。如果本身提供的是IP地址,那么我们就没必要再做转换了。

下面就是一个简单的识别方法:

/**
 * @brief 判断给的字符串是不是IP地址
 *
 * @param str
 *
 * @return 
 */
int is_valid_ip(const char *str) {
    struct in_addr addr4;
    struct in6_addr addr6;

    if (inet_pton(AF_INET, str, &addr4) == 1) {
        return 1; // IPv4
    } else if (inet_pton(AF_INET6, str, &addr6) == 1) {
        return 2; // IPv6
    }
    return 0; // 不是 IP 地址
}

IPv4格式返回 1 ,IPv6格式返回 2,不是 IP 地址,就可以尝试使用 getaddrinfo 方法查询 IP 地址了。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注