如何在Linux下使用C语言获取本机IP地址?

在Linux系统中,使用C语言获取IP地址可以通过多种方式实现,下面将详细介绍一种常用的方法:通过调用系统函数getifaddrs()来获取网络接口的IP地址。

如何在Linux下使用C语言获取本机IP地址?插图1

步骤1: 包含必要的头文件

需要包含一些必要的头文件:

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

步骤2: 编写获取IP地址的函数

编写一个函数来获取并打印所有网络接口的IP地址:

void get_ip_addresses() {
    struct ifaddrs *ifaddr, *ifa;
    int family, s;
    char host[NI_MAXHOST];
    if (getifaddrs(&ifaddr) == -1) {
        perror("Error in getifaddrs");
        exit(EXIT_FAILURE);
    }
    // 遍历链表
    for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
        if (ifa->ifa_addr == NULL)
            continue;  
        family = ifa->ifa_addr->sa_family;
        // 对于IPv4和IPv6地址进行处理
        if (family == AF_INET || family == AF_INET6) {
            s = getnameinfo(ifa->ifa_addr,
                    (family == AF_INET) ? sizeof(struct sockaddr_in) :
                                          sizeof(struct sockaddr_in6),
                    host, NI_MAXHOST,
                    NULL, 0, NI_NUMERICHOST);
            if (s != 0) {
                printf("getnameinfo() failed: %sn", gai_strerror(s));
                exit(EXIT_FAILURE);
            }
            printf("<%s> IP Address: %sn", ifa->ifa_name, host);
        }
    }
    freeifaddrs(ifaddr);
}

步骤3: 主函数中调用该函数

在主函数中调用这个函数来显示所有网络接口的IP地址:

如何在Linux下使用C语言获取本机IP地址?插图3

int main() {
    get_ip_addresses();
    return 0;
}

编译和运行程序

保存上述代码到一个文件中,例如get_ip.c,然后使用gcc编译器进行编译:

gcc get_ip.c -o get_ip

运行编译后的程序:

./get_ip

这将输出机器上所有网络接口的IP地址。

如何在Linux下使用C语言获取本机IP地址?插图5

各位小伙伴们,我刚刚为大家分享了有关linux c语言 获取ip的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/87336.html

小末小末
上一篇 2024年10月31日 00:24
下一篇 2024年10月31日 00:39

相关推荐