mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-14 08:50:53 +08:00
63 lines
1.7 KiB
C
63 lines
1.7 KiB
C
#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"
|
||
|
||
typedef struct ACL_IFADDR {
|
||
char *name; /* 接口名称 */
|
||
#if defined(_WIN32) || defined(_WIN64)
|
||
char *desc; /* 接口描述 */
|
||
#endif
|
||
char ip[32]; /* 以字符串表示的IP地址 */
|
||
unsigned int addr; /* 网络字节序的 32 位 IP 地址 */
|
||
} 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*}
|
||
*/
|
||
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_ARGV *} 返回条件的结果集,如果 pattern 后面带有端口,则自动
|
||
* 将端口添加在每个 IP 后面,若返回对象非空,调用者用完应调用 acl_argv_free
|
||
* 释放该对象
|
||
*/
|
||
ACL_API ACL_ARGV *acl_ifconf_search(const char *pattern);
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
|
||
#endif
|