`

getifaddrs()和struct ifaddrs的使用,获取本机IP

 
阅读更多

    ifaddrs结构体定义如下:

struct ifaddrs 
{ 
    struct ifaddrs  *ifa_next;    /* Next item in list */ 
    char            *ifa_name;    /* Name of interface */ 
    unsigned int     ifa_flags;   /* Flags from SIOCGIFFLAGS */ 
    struct sockaddr *ifa_addr;    /* Address of interface */ 
    struct sockaddr *ifa_netmask; /* Netmask of interface */ 
    union 
    { 
        struct sockaddr *ifu_broadaddr; /* Broadcast address of interface */ 
        struct sockaddr *ifu_dstaddr; /* Point-to-point destination address */ 
    } ifa_ifu; 
    #define              ifa_broadaddr ifa_ifu.ifu_broadaddr 
    #define              ifa_dstaddr   ifa_ifu.ifu_dstaddr 
    void            *ifa_data;    /* Address-specific data */ 
}; 

    ifa_next指向链表的下一个成员;ifa_name是接口名称,以0结尾的字符串,比如eth0,lo;ifa_flags是接口的标识位(比如当IFF_BROADCAST或IFF_POINTOPOINT设置到此标识位时,影响联合体变量ifu_broadaddr存储广播地址或ifu_dstaddr记录点对点地址);ifa_netmask存储该接口的子网掩码;结构体变量存储广播地址或点对点地址(见括弧介绍ifa_flags);ifa_data存储了该接口协议族的特殊信息,它通常是NULL(一般不关注他)。

    函数getifaddrs(int getifaddrs (struct ifaddrs **__ifap))获取本地网络接口信息,将之存储于链表中,链表头结点指针存储于__ifap中带回,函数执行成功返回0,失败返回-1,且为errno赋值。
    很显然,函数getifaddrs用于获取本机接口信息,比如最典型的获取本机IP地址。

 

 

分享到:
评论

相关推荐

    Android getifaddrs()和freeifaddrs()函数的实现

    在实际应用中,`getifaddrs()`和`freeifaddrs()`常用于获取设备的网络状态,例如检查设备是否有有效的网络连接,或者获取当前的IP地址以便进行网络通信。开发者可以根据需求解析`struct ifaddrs`中的其他字段,如`if...

    解决Android下getifaddrs和freeifaddrs undefined reference 的问题

    `getifaddrs`和`freeifaddrs`是两个在Unix-like系统中广泛使用的C语言函数,用于获取这些信息。但在Android平台上,由于其基于Linux内核但并非完全兼容,可能会遇到这两个函数未定义的引用问题。本文将详细解析这个...

    android-ifaddrs 2014兼容版

    `ifaddrs.c`文件则是实现获取网络接口信息的函数,核心是`getifaddrs()`和`freeifaddrs()`。`getifaddrs()`函数遍历所有网络接口,填充`struct ifaddrs`结构体链表,并返回链表的头指针。`freeifaddrs()`则用于释放...

    获取本机的IPV4地址

    要获取本机的IPv4地址,我们通常需要利用操作系统提供的API,比如在Windows系统中使用`GetAdaptersInfo`或`GetAdaptersAddresses`函数,在Linux系统中则可以使用`ifconfig`命令或者`getifaddrs`函数。在C++中,我们...

    C++获取本机IP......

    本文将详细讲解如何使用C++获取本机的IPv4和IPv6地址,并结合"iptest"这个源码示例进行解析。 首先,我们需要了解网络接口和IP地址的基本概念。在计算机网络中,接口(Interface)是网络设备与网络通信的物理端点,...

    得到本机的IP

    在IT行业中,获取本机IP地址是一项常见的任务,特别是在网络编程和系统管理中。这个"得到本机的IP"的代码示例显然提供了一个方法来实现这一功能。下面,我们将详细探讨如何在不同的操作系统和编程语言中获取本地IP...

    linux下获取本机ip地址,ipv4和ipv6.pdf

    Linux 下获取本机 IP 地址(IPv4 和 IPv6) Linux 操作系统中获取本机 IP 地址有多种方法,本文将介绍通过 C 语言编程获取 IPv4 和 IPv6 地址的方法。 获取 IPv4 地址 在 Linux 中,获取 IPv4 地址可以使用 `...

    Qt获取IP地址、MAC地址等网卡信息,区分本地网卡、无线网卡和虚拟网卡

    在Unix-like系统中,可以使用`getifaddrs()`函数来遍历所有网络接口,并通过`ifa_addr`字段获取IP地址。在Windows中,可以使用`GetAdaptersAddresses()`函数,同样通过遍历结果来获取IP地址。IP地址通常有IPv4和...

    c语言 获取本机信息

    在C语言中获取本机信息是一项基础而重要的任务,它涉及到操作系统接口的使用以及网络编程的知识。本机信息包括但不限于主机名、操作系统类型、内存大小、磁盘信息以及IP地址等。下面将详细介绍如何利用C语言来获取...

    获取设备IP接口函数.zip_linux_seriouslqh_套接字_网络编程_获取Linux系统IP

    在Linux中,可以使用`getifaddrs`函数来获取网络接口的信息,包括IP地址。这个函数会返回一个链表,包含了所有网络接口的详细信息。每个接口都有一个`struct ifaddrs`结构体,其中包含了接口名称、地址家族(IPv4或...

    C++ 获取本地的IP地址

    在这个例子中,`getifaddrs`函数获取了所有网络接口的地址信息,然后我们遍历这些接口,筛选出活动的非回环接口,并使用`inet_ntop`函数将IP地址转换为字符串形式。 总结起来,获取本地IP地址主要涉及以下几个关键...

    基于vc的本机ip地址查询

    4. **查询网络接口**:使用`getifaddrs`函数获取网络接口列表,其中包括了本机的所有网络适配器及其对应的IP地址。 ```cpp struct ifaddrs *ifaddr, *ifa; getifaddrs(&ifaddr); for (ifa = ifaddr; ifa != NULL; ...

    获取本地IP地址

    每个接口信息由`struct ifaddrs`表示,其中的`ifa_addr`字段指向具体的IP地址(可以是IPv4的`struct sockaddr_in`或IPv6的`struct sockaddr_in6`)。 在C语言程序中,首先需要包含必要的头文件,然后根据操作系统...

    IPHONE 获取本地IP地址源代码

    通常,这个函数会使用`getifaddrs`系统调用来获取网络接口的信息,该调用可以获取到所有活动网络接口的地址。然后,遍历这些接口,检查它们的类型(例如,是否为IPv4或IPv6),并找出与当前连接相关的IP地址。通常,...

    iOS获取手机ip地址代码

    `ifaddrs.h`提供了获取网络接口地址的接口,而`arpa/inet.h`包含了IP地址转换的函数,如`inet_ntoa`。 接下来,定义一个方法`getIPAddress`,返回类型为`NSString`,这将是我们的IP地址字符串: ```objc - ...

    iOS获取当前连接的WiFi以及IP地址

    首先,为了获取设备的本地IP地址,我们可以使用`getifaddrs`函数。这是一个C语言接口,用于获取系统上所有网络接口的信息。在Objective-C中,我们可以通过以下步骤实现: 1. 导入必要的头文件: ```objc #import ...

    net.zip_Linux interfaces IP_linux mac ip

    要获取接口的IP地址,我们可以使用`getifaddrs()`函数,这是一个标准的C语言接口,可以获取系统中所有网络接口的地址信息。这个函数会填充一个`ifaddrs`结构体链表,其中包含了每个接口的IP地址(IPv4和IPv6)和其他...

    c++ 获取mac地址集中方法

    在`struct ifaddrs`结构体中,`ifa_addr`字段指向`sockaddr`结构体,根据不同的地址族,如AF_LINK,可以获取到`struct sockaddr_dl`,其中`sa_data`字段就是MAC地址。 5. **使用`libnet`库**: `libnet`库是一个跨...

    linux获取广播地址源码C语言

    不过,为了编程目的,我们可以使用套接字API(Socket API)和`ifaddrs`结构体来获取这些信息,而无需直接读取配置文件。 C语言源码中,我们需要引入必要的头文件: ```c #include #include #include #include ...

Global site tag (gtag.js) - Google Analytics