如何使用getifaddr()函数获取IPV6接口地址 [英] how to get IPV6 interface address using getifaddr() function

查看:391
本文介绍了如何使用getifaddr()函数获取IPV6接口地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有getifaddrs()定义,但这是针对IPv4的.请指导我如何使用getifaddrs()函数获取IPv6 if地址.

I have getifaddrs() definition but it is for IPv4. Please guide me how to get IPv6 if address using the getifaddrs() function.

推荐答案

getifaddrs不支持IPv6.这是有关如何打印系统上所有接口的名称和IP地址的示例:

getifaddrs does support IPv6. Here's an example on how to print the name and IP address of all interfaces on the system:

struct ifaddrs *ifa, *ifa_tmp;
char addr[INET6_ADDRSTRLEN];

if (getifaddrs(&ifa) == -1) {
    perror("getifaddrs failed");
    exit(1);
}

ifa_tmp = ifa;
while (ifa_tmp) {
    if ((ifa_tmp->ifa_addr) && ((ifa_tmp->ifa_addr->sa_family == AF_INET) ||
                              (ifa_tmp->ifa_addr->sa_family == AF_INET6))) {
        if (ifa_tmp->ifa_addr->sa_family == AF_INET) {
            // create IPv4 string
            struct sockaddr_in *in = (struct sockaddr_in*) ifa_tmp->ifa_addr;
            inet_ntop(AF_INET, &in->sin_addr, addr, sizeof(addr));
        } else { // AF_INET6
            // create IPv6 string
            struct sockaddr_in6 *in6 = (struct sockaddr_in6*) ifa_tmp->ifa_addr;
            inet_ntop(AF_INET6, &in6->sin6_addr, addr, sizeof(addr));
        }
        printf("name = %s\n", ifa_tmp->ifa_name);
        printf("addr = %s\n", addr);
    }
    ifa_tmp = ifa_tmp->ifa_next;
}
freeifaddrs(ifa);

这篇关于如何使用getifaddr()函数获取IPV6接口地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆