ZBLOG

linux 网络编程 获取网络接口的IPV6地址

在 Linux 网络编程中,获取网络接口的 IPV6 地址可以使用如下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>

int main()
{
    int skfd;
    struct ifreq ifr6;
    struct sockaddr_in6 *addr6;

    skfd = socket(AF_INET6, SOCK_DGRAM, 0);
    strncpy(ifr6.ifr_name, "eth0", IFNAMSIZ);

    if (ioctl(skfd, SIOCGIFADDR, &ifr6) == -1) {
        perror("ioctl");
        exit(EXIT_FAILURE);
    }

    addr6 = (struct sockaddr_in6 *)&(ifr6.ifr_addr);
    char ipv6[INET6_ADDRSTRLEN];
    inet_ntop(AF_INET6, &(addr6->sin6_addr), ipv6, INET_ADDRSTRLEN);
    printf("IPv6 address: %s\n", ipv6);

    close(skfd);
    return 0;
}

与获取 IPV4 地址类似,我们首先需要创建一个 IPv6 套接字,并将网络接口的名称存储在 ifreq 结构体的成员变量 ifr_name 中。然后调用 ioctl 函数向内核发送 SIOCGIFADDR 命令请求获取目标网络接口的 IPV6 地址。

如果命令执行成功,则内核将 IPV6 地址信息填充到 ifreq 结构体中。我们需要将其转换为 sockaddr_in6 类型,并使用 inet_ntop 函数将地址转换为可读格式,最后输出结果即可。

需要注意的是,在实际开发中可能会有多个网络接口存在,因此需要对每个接口进行遍历并获取对应的 IPV6 地址信息。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=1259

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?