C 接口称为 ifaddrs,您可以将其包含在:
#include <sys/types.h>
#include <ifaddrs.h>
您感兴趣的函数是getifaddrs,一旦处理完数据,freeifaddrs。
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 */
};
此结构包含ifconfig 命令行工具返回的所有信息。
对于 C++ 用户,我建议你使用这样的删除器:
void ifaddrs_deleter(struct ifaddrs * ia)
{
freeifaddrs(ia);
}
并将getifaddrs() 的结果附加到它:
struct ifaddrs * ifa_start(nullptr);
if(getifaddrs(&ifa_start) != 0)
{
return;
}
// will automatically delete on exception or any return
std::shared_ptr<struct ifaddrs> auto_free(ifa_start, ifaddrs_deleter);