首页 > 后端开发 > C++ > 如何用 C 语言以编程方式检索 Linux 机器的 IP 地址?

如何用 C 语言以编程方式检索 Linux 机器的 IP 地址?

Mary-Kate Olsen
发布: 2024-12-10 00:19:14
原创
332 人浏览过

How to Programmatically Retrieve a Linux Machine's IP Addresses in C  ?

如何用 C 语言检索 Linux 机器的 IP 地址

问题:

确定 Linux 的 IP 地址机器使用 C 编程,专门针对多个潜在的公共 IP 地址地址。

解决方案:

使用 getifaddrs()

getifaddrs() 函数为在 Linux 和 POSIX 上检索 IP 地址提供了更可靠的方法- 兼容的操作系统。它返回 ifaddrs 结构的链表,每个结构代表一个网络接口及其关联的地址。下面是演示其用法的代码示例:

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

int main (int argc, const char * argv[]) {
    struct ifaddrs * ifAddrStruct=NULL;
    struct ifaddrs * ifa=NULL;
    void * tmpAddrPtr=NULL;

    getifaddrs(&amp;ifAddrStruct);

    for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) {
        if (!ifa->ifa_addr) {
            continue;
        }
        if (ifa->ifa_addr->sa_family == AF_INET) { // check it is IP4
            // is a valid IP4 Address
            tmpAddrPtr=&amp;((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
            char addressBuffer[INET_ADDRSTRLEN];
            inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); 
        } else if (ifa->ifa_addr->sa_family == AF_INET6) { // check it is IP6
            // is a valid IP6 Address
            tmpAddrPtr=&amp;((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
            char addressBuffer[INET6_ADDRSTRLEN];
            inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN);
            printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); 
        } 
    }
    if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct);
    return 0;
}
登录后复制

在代码中,getifaddrs() 用网络接口信息填充 ifAddrStruct 链表。每个 ifaddrs 结构都包含一个 ifa_addr 成员,它是指向代表 IP 地址的套接字地址结构的指针。 AF_INET 用于 IPv4 地址,AF_INET6 用于 IPv6 地址。

代码迭代链表,检查 ifa_addr 是否有效,然后通过将其转换为人类地址来检索并打印 IP 地址字符串使用inet_ntop()的可读格式。

要识别公共IP地址,您可以检查网络接口名称(例如“eth0”)或比较 IP 地址以确定哪一个与外部网络匹配。

以上是如何用 C 语言以编程方式检索 Linux 机器的 IP 地址?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板