#ifndef ACL_IFCONF_INCLUDE_H #define ACL_IFCONF_INCLUDE_H #ifdef __cplusplus extern "C" { #endif #include "../stdlib/acl_define.h" #include "../stdlib/acl_argv.h" #include "acl_sane_inet.h" typedef struct ACL_IFADDR { char name[256]; /* 接口名称 */ #if defined(_WIN32) || defined(_WIN64) char desc[256]; /* 接口描述 */ #endif char addr[128]; /* 以字符串表示的IP地址 */ ACL_SOCKADDR saddr; /* 兼容 IPV4 & IPV6 的地址 */ } ACL_IFADDR; typedef struct ACL_IFCONF { ACL_IFADDR *addrs; /* ACL_IFADDR 数组 */ int length; /* ACL_IFADDR 数组长度 */ /* for acl_iterator */ /* 取迭代器头函数 */ const ACL_IFADDR *(*iter_head)(ACL_ITER*, struct ACL_IFCONF*); /* 取迭代器下一个函数 */ const ACL_IFADDR *(*iter_next)(ACL_ITER*, struct ACL_IFCONF*); /* 取迭代器尾函数 */ const ACL_IFADDR *(*iter_tail)(ACL_ITER*, struct ACL_IFCONF*); /* 取迭代器上一个函数 */ const ACL_IFADDR *(*iter_prev)(ACL_ITER*, struct ACL_IFCONF*); } ACL_IFCONF; /** * 获得主机的所有网络地址及网络接口名称 * @return {ACL_IFCONF*} 返回值非 NULL 时,需调用 acl_free_ifaddrs 释放 */ ACL_API ACL_IFCONF *acl_get_ifaddrs(void); /** * 释放由 acl_get_ifaddrs() 返回的 ACL_IFCONF 内存 * @param ifconf {ACL_IFCONF*} */ ACL_API void acl_free_ifaddrs(ACL_IFCONF *ifconf); /** * 扫描本机所有网卡 IP,将所有匹配指定模式的 IP 地址返回,目前仅支持 IPV4 * @param pattern {const char *} 指定的匹配模式,格式为:xxx.xxx.xxx.xxx 或 * xxx.xxx.xxx.xxx:port,如:192.168.*.*, 192.168.*.8:80,10.*.0.*:81 * @return {ACL_IFCONF *} 返回条件的结果集,如果 pattern 后面带有端口,则自动 * 将端口添加在每个 IP 后面,若返回对象非空,通过调用 acl_free_ifaddrs * 释放该对象 */ ACL_API ACL_IFCONF *acl_ifconf_search(const char *pattern); #ifdef __cplusplus } #endif #endif