ZBLOG

getifaddrs

getifaddrs 是一个在 Unix/Linux 系统中用于获取网络接口地址信息的函数。它可以用来列出系统上所有网络接口及其相关的地址信息。

函数原型

#include <sys/types.h>
#include <ifaddrs.h>

int getifaddrs(struct ifaddrs **ifa);
void freeifaddrs(struct ifaddrs *ifa);

参数说明

  • struct ifaddrs **ifa: 指向结构体 ifaddrs 的指针,用于存储链表的头指针。

返回值

  • 成功时返回 0,失败时返回 -1,并设置 errno 以指示错误类型。

使用方法

  1. 调用 getifaddrs 获取网络接口信息。
  2. 遍历返回的链表,访问每个接口的信息。
  3. 使用 freeifaddrs 释放分配的内存。

示例代码

下面是一个简单示例,展示如何使用 getifaddrs 列出所有网络接口及其地址:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ifaddrs.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main() {
    struct ifaddrs *interfaces, *temp_addr;

    // 获取网络接口信息
    if (getifaddrs(&interfaces) == -1) {
        perror("getifaddrs");
        return EXIT_FAILURE;
    }

    temp_addr = interfaces;

    // 遍历并打印每个接口的信息
    while (temp_addr != NULL) {
        printf("Interface: %s\n", temp_addr->ifa_name);

        // 检查地址族(IPv4或IPv6)
        if (temp_addr->ifa_addr->sa_family == AF_INET) {
            char address[INET_ADDRSTRLEN];
            struct sockaddr_in *addr_in = (struct sockaddr_in *)temp_addr->ifa_addr;
            inet_ntop(AF_INET, &addr_in->sin_addr, address, sizeof(address));
            printf("  Address: %s\n", address);
        } else if (temp_addr->ifa_addr->sa_family == AF_INET6) {
            char address[INET6_ADDRSTRLEN];
            struct sockaddr_in6 *addr_in6 = (struct sockaddr_in6 *)temp_addr->ifa_addr;
            inet_ntop(AF_INET6, &addr_in6->sin6_addr, address, sizeof(address));
            printf("  Address: %s\n", address);
        }

        temp_addr = temp_addr->ifa_next; // 移动到下一个接口
    }

    freeifaddrs(interfaces); // 释放内存
    return EXIT_SUCCESS;
}

这个示例程序会列出所有网络接口及其对应的 IPv4 和 IPv6 地址。如果您在 Unix/Linux 系统上编译和运行这段代码,会得到类似以下输出:

Interface: lo
  Address: 127.0.0.1
Interface: eth0
  Address: 192.168.1.10
...

注意:要编译这段代码,请确保链接了正确的库,并在 POSIX 环境中运行。


内容由零声教学AI助手提供,问题来源于学员提问

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?