相关疑难解决方法(0)

扩展IPv6地址,以便我可以将其打印到stdout

我正在使用getifaddrs()和inet_ntop()来获取系统上的ip地址.当系统设置为IPv6时,返回的地址是缩短版本(使用:: for zeros).有没有办法将该地址扩展为完整地址?

这是我正在使用的代码:

struct ifaddrs *myaddrs, *ifa;
void *in_addr;
char buf[64];

if(getifaddrs(&myaddrs) != 0)
{
    perror("getifaddrs");
    exit(1);
}

for (ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next)
{
    if (ifa->ifa_addr == NULL)
        continue;
    if (!(ifa->ifa_flags & IFF_UP))
        continue;

    switch (ifa->ifa_addr->sa_family)
    {
        case AF_INET:
        {
            struct sockaddr_in *s4 = (struct sockaddr_in *)ifa->ifa_addr;
            in_addr = &s4->sin_addr;
            break;
        }

        case AF_INET6:
        {
            struct sockaddr_in6 *s6 = (struct sockaddr_in6 *)ifa->ifa_addr;
            in_addr = &s6->sin6_addr;
            break;
        }

        default:
            continue;
    }

    if (!inet_ntop(ifa->ifa_addr->sa_family, in_addr, buf, …
Run Code Online (Sandbox Code Playgroud)

c linux ipv6

9
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×1

ipv6 ×1

linux ×1