acl
3.5.3.0
|
#include "../stdlib/acl_define.h"
#include "../stdlib/acl_htable.h"
#include "../stdlib/acl_cache2.h"
#include "../event/acl_events.h"
#include "../aio/acl_aio.h"
#include "acl_rfc1035.h"
#include "acl_sane_inet.h"
#include "acl_netdb.h"
类 | |
struct | ACL_DNS_ADDR |
struct | ACL_DNS |
宏定义 | |
#define | ACL_DNS_OK 0 |
#define | ACL_DNS_OK_CACHE 1 |
#define | ACL_DNS_ERR_FMT -1 |
#define | ACL_DNS_ERR_SVR -2 |
#define | ACL_DNS_ERR_NO_EXIST -3 |
#define | ACL_DNS_ERR_NO_SUPPORT -4 |
#define | ACL_DNS_ERR_DENY -5 |
#define | ACL_DNS_ERR_YX -6 |
#define | ACL_DNS_ERR_YXRR -7 |
#define | ACL_DNS_ERR_NXRR -8 |
#define | ACL_DNS_ERR_NO_AUTH -9 |
#define | ACL_DNS_ERR_NOT_ZONE -10 |
#define | ACL_DNS_ERR_UNPACK -15 |
#define | ACL_DNS_ERR_TIMEOUT -16 |
#define | ACL_DNS_ERR_EXIST -17 |
#define | ACL_DNS_ERR_BUILD_REQ -18 |
#define | ACL_DNS_FLAG_ALLOC (1 << 0) /* 该异步句柄是动态分配的 */ |
#define | ACL_DNS_FLAG_CHECK_DNS_IP (1 << 1) /* 检查DNS地址是否匹配 */ |
#define | ACL_DNS_FLAG_CHECK_DNS_NET (1 << 2) /* 检查DNS网络是否匹配 */ |
类型定义 | |
typedef struct ACL_DNS_ADDR | ACL_DNS_ADDR |
typedef struct ACL_DNS | ACL_DNS |
typedef struct ACL_DNS_REQ | ACL_DNS_REQ |
函数 | |
ACL_API int | acl_dns_init (ACL_DNS *dns, ACL_AIO *aio, int timeout) |
ACL_API ACL_DNS * | acl_dns_create (ACL_AIO *aio, int timeout) |
ACL_API void | acl_dns_open_cache (ACL_DNS *dns, int limit) |
ACL_API void | acl_dns_add_dns (ACL_DNS *dns, const char *dns_ip, unsigned short dns_port, int mask_length) |
ACL_API void | acl_dns_clear_dns (ACL_DNS *dns) |
ACL_API ACL_ARRAY * | acl_dns_list (ACL_DNS *dns) |
ACL_API size_t | acl_dns_size (ACL_DNS *dns) |
ACL_API int | acl_dns_empty (ACL_DNS *dns) |
ACL_API void | acl_dns_del_dns (ACL_DNS *dns, const char *ip, unsigned short port) |
ACL_API void | acl_dns_close (ACL_DNS *dns) |
ACL_API void | acl_dns_check_dns_ip (ACL_DNS *dns) |
ACL_API void | acl_dns_check_dns_net (ACL_DNS *dns) |
ACL_API void | acl_dns_set_retry_limit (ACL_DNS *dns, int retry_limit) |
ACL_API void | acl_dns_lookup (ACL_DNS *dns, const char *domain, void(*callback)(ACL_DNS_DB *, void *, int, const ACL_RFC1035_MESSAGE *), void *ctx) |
ACL_API void | acl_dns_lookup2 (ACL_DNS *dns, const char *domain, unsigned short type, void(*callback)(ACL_DNS_DB *, void *, int, const ACL_RFC1035_MESSAGE *), void *ctx) |
ACL_API void | acl_dns_add_host (ACL_DNS *dns, const char *domain, const char *ip_list) |
ACL_API void | acl_dns_add_group (ACL_DNS *dns, const char *group, const char *refer, const char *ip_list, const char *excepts) |
ACL_API void | acl_dns_cancel (ACL_DNS_REQ *handle) |
ACL_API const char * | acl_dns_serror (int errnum) |
typedef struct ACL_DNS_ADDR ACL_DNS_ADDR |
typedef struct ACL_DNS_REQ ACL_DNS_REQ |
ACL_API void acl_dns_add_dns | ( | ACL_DNS * | dns, |
const char * | dns_ip, | ||
unsigned short | dns_port, | ||
int | mask_length | ||
) |
添加一个DNS服务器地址
dns | {ACL_DNS*} DNS异步查询句柄 |
dns_ip | {const char*} DNS服务器IP地址 |
dns_port | {unsigned short} DNS服务器端口 |
mask_length | {int} DNS服务器所在的网段掩码长度(0 < && < 32) |
ACL_API void acl_dns_add_group | ( | ACL_DNS * | dns, |
const char * | group, | ||
const char * | refer, | ||
const char * | ip_list, | ||
const char * | excepts | ||
) |
向DNS查询对象中添加查询域名组信息
dns | {ACL_DNS*} DNS异步查询句柄 |
group | {const char*} 域名组名,如: .test.com, 则 a.test.com, b.test.com 都属于 .test.com 域名组 |
ip_list | {const char*} 如果非空则采用静态方式添加IP地址列表 |
refer | {const char*} 域名组的代表域名, 将会用此域名代表整个域名组去做DNS查询 |
excepts | {ACL_ARGV*} 虽然这些域名属于 group 的子域名但却不属于其域名组的 成员集合 |
ACL_API void acl_dns_add_host | ( | ACL_DNS * | dns, |
const char * | domain, | ||
const char * | ip_list | ||
) |
向DNS查询对象中添加静态主机信息
dns | {ACL_DNS*} DNS异步查询句柄 |
domain | {const char*} 域名 |
ip_list | {const char*} IP地址列表,分隔符为 ';',如: 192.168.0.1;192.168.0.2 |
ACL_API void acl_dns_cancel | ( | ACL_DNS_REQ * | handle | ) |
取消某个查询事件对象
handle | {ACL_DNS_REQ*} 某次域名查询事件 |
ACL_API void acl_dns_check_dns_ip | ( | ACL_DNS * | dns | ) |
设置标志位,检查DNS来源IP地址是否与目标地址相同,若不同则丢弃所读的 数据包,主要是为了防止DNS查询时的UDP攻击
dns | {ACL_DNS*} DNS异步查询句柄 |
ACL_API void acl_dns_check_dns_net | ( | ACL_DNS * | dns | ) |
设置标志位,检查DNS来源IP所在网段是否与目标网段相同,若不同则丢弃 所读的数据包,主要是为了防止DNS查询时的UDP攻击
dns | {ACL_DNS*} DNS异步查询句柄 |
ACL_API void acl_dns_clear_dns | ( | ACL_DNS * | dns | ) |
清除 DNS 服务器地址列表
dns | {ACL_DNS*} DNS异步查询句柄 |
ACL_API void acl_dns_close | ( | ACL_DNS * | dns | ) |
关闭异步查询句柄同时释放所有资源
dns | {ACL_DNS*} DNS异步查询句柄 |
创建一个DNS异步查询对象并同时进行初始化
aio | {ACL_AIO*} 异步句柄 |
timeout | {int} 每次DNS查询时的超时值 |
ACL_API void acl_dns_del_dns | ( | ACL_DNS * | dns, |
const char * | ip, | ||
unsigned short | port | ||
) |
删除一个DNS服务器地址
dns | {ACL_DNS*} DNS异步查询句柄 |
ip | {const char*} DNS服务器IP地址 |
port | {unsigned short} DNS服务器端口 |
ACL_API int acl_dns_empty | ( | ACL_DNS * | dns | ) |
判断 DNS 服务器地址列表是否为空
dns | {ACL_DNS*} DNS异步查询句柄 @retrn {int} 返回值非 0 表示为空 |
初始化DNS异步查询对象结构
dns | {ACL_DNS*} DNS异步查询句柄 |
aio | {ACL_AIO*} 异步句柄 |
timeout | {int} 每次DNS查询时的超时值 |
ACL_API void acl_dns_lookup | ( | ACL_DNS * | dns, |
const char * | domain, | ||
void(*)(ACL_DNS_DB *, void *, int, const ACL_RFC1035_MESSAGE *) | callback, | ||
void * | ctx | ||
) |
异步查询一个域所对应的A记录IP地址集合
dns | {ACL_DNS*} DNS异步查询句柄 |
domain | {const char*} 域名 |
callback | {void (*)(ACL_DNS_DB*, void*, int, const ACL_RFC1035_MESSAGE*)} 查询成功或失败的回调函数, 若返回给 callback 的 ACL_DNS_DB 为空则表示查询失败, 第二个参数为用户设置的参数, 第三个参数为查询失败时的错误号 |
ctx | {void*} callback 的参数之一 |
ACL_API void acl_dns_lookup2 | ( | ACL_DNS * | dns, |
const char * | domain, | ||
unsigned short | type, | ||
void(*)(ACL_DNS_DB *, void *, int, const ACL_RFC1035_MESSAGE *) | callback, | ||
void * | ctx | ||
) |
异步查询一个域所对应的记录类型的IP地址集合
dns | {ACL_DNS*} DNS异步查询句柄 |
domain | {const char*} 域名 |
type | {unsigned short} 查询类型,参见 acl_rfc1035.h 中的 ACL_RFC1035_TYPE_XXX |
callback | {void (*)(ACL_DNS_DB*, void*, int, const ACL_RFC1035_MESSAGE*)} 查询成功或失败的回调函数, 若返回给 callback 的 ACL_DNS_DB 为空则表示查询失败, 第二个参数为用户设置的参数, 第三个参数为查询失败时的错误号 |
ctx | {void*} callback 的参数之一 |
ACL_API void acl_dns_open_cache | ( | ACL_DNS * | dns, |
int | limit | ||
) |
打开DNS缓存机制
dns | {ACL_DNS*} DNS异步查询句柄 |
limit | {int} DNS 缓存中最大缓存条目 |
ACL_API const char* acl_dns_serror | ( | int | errnum | ) |
根据错误号得到错误描述信息
errnum | {int} DNS查询时返回的错误号 |
ACL_API void acl_dns_set_retry_limit | ( | ACL_DNS * | dns, |
int | retry_limit | ||
) |
设置DNS查询超时时重试次数
dns | {ACL_DNS*} DNS异步查询句柄 |
retry_limit | {int} 重试次数 |
ACL_API size_t acl_dns_size | ( | ACL_DNS * | dns | ) |
获得 DNS 服务器地址列表的数量
dns | {ACL_DNS*} DNS异步查询句柄 |