zoukankan      html  css  js  c++  java
  • 判断是否IPv6网络

    bool isIPV6Net(const std::string ip_v4, std::string& out_ip)
    {
        bool is_v6 = false;
    
        struct addrinfo* res0;
        struct addrinfo hints;
        struct addrinfo* res;
    
        memset(&hints, 0, sizeof(hints));
        hints.ai_flags = 0;
        hints.ai_family = PF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
    
        int n = 0;
        if((n=getaddrinfo(ip_v4.c_str(), "http", &hints, &res0))!=0)
        {
            printf("getaddrinfo error: %s
    ",gai_strerror(n));
            return false;
        }
    
        struct sockaddr_in6* addr6;
        struct sockaddr_in* addr;
        char ipbuf[32] = {''};
    
        for(res = res0; res; res = res->ai_next)
        {
            if(res->ai_family == AF_INET6)
            {
                addr6 =( struct sockaddr_in6*)res->ai_addr;
                inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, sizeof(ipbuf));
                is_v6 = true;
            }
            else
            {
                addr =( struct sockaddr_in*)res->ai_addr;
                inet_ntop(AF_INET, &addr->sin_addr, ipbuf, sizeof(ipbuf));
            }
            break;
        }
        out_ip = ipbuf;
        return is_v6;
    }

    测试:

    char ipv4[4] = {192, 168, 2, 119};
    char ipv4_str_buf[INET_ADDRSTRLEN] = { 0 };
    const char *ipv4_str = inet_ntop(AF_INET, &ipv4, ipv4_str_buf, sizeof(ipv4_str_buf));
    
    std::string out_ip;
    bool is = isIPV6Net("64:ff9b::739f:62d", out_ip);
  • 相关阅读:
    npropress进度条插件的使用
    让img图片像背景一样显示
    vue-cli3配置多页面入口
    7中漂亮的纯css字体
    速查手册
    推荐系统架构
    leetcode 172. 阶乘后的零
    C++ string和int互相转换
    特征分解
    线性代数基础
  • 原文地址:https://www.cnblogs.com/afan/p/6192514.html
Copyright © 2011-2022 走看看