acl  3.5.3.0
acl_dns.h 文件参考
#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"
+ acl_dns.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

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_DNSacl_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_ARRAYacl_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)
 

宏定义说明

◆ ACL_DNS_ERR_BUILD_REQ

#define ACL_DNS_ERR_BUILD_REQ   -18

在文件 acl_dns.h38 行定义.

◆ ACL_DNS_ERR_DENY

#define ACL_DNS_ERR_DENY   -5

在文件 acl_dns.h29 行定义.

◆ ACL_DNS_ERR_EXIST

#define ACL_DNS_ERR_EXIST   -17

在文件 acl_dns.h37 行定义.

◆ ACL_DNS_ERR_FMT

#define ACL_DNS_ERR_FMT   -1

在文件 acl_dns.h25 行定义.

◆ ACL_DNS_ERR_NO_AUTH

#define ACL_DNS_ERR_NO_AUTH   -9

在文件 acl_dns.h33 行定义.

◆ ACL_DNS_ERR_NO_EXIST

#define ACL_DNS_ERR_NO_EXIST   -3

在文件 acl_dns.h27 行定义.

◆ ACL_DNS_ERR_NO_SUPPORT

#define ACL_DNS_ERR_NO_SUPPORT   -4

在文件 acl_dns.h28 行定义.

◆ ACL_DNS_ERR_NOT_ZONE

#define ACL_DNS_ERR_NOT_ZONE   -10

在文件 acl_dns.h34 行定义.

◆ ACL_DNS_ERR_NXRR

#define ACL_DNS_ERR_NXRR   -8

在文件 acl_dns.h32 行定义.

◆ ACL_DNS_ERR_SVR

#define ACL_DNS_ERR_SVR   -2

在文件 acl_dns.h26 行定义.

◆ ACL_DNS_ERR_TIMEOUT

#define ACL_DNS_ERR_TIMEOUT   -16

在文件 acl_dns.h36 行定义.

◆ ACL_DNS_ERR_UNPACK

#define ACL_DNS_ERR_UNPACK   -15

在文件 acl_dns.h35 行定义.

◆ ACL_DNS_ERR_YX

#define ACL_DNS_ERR_YX   -6

在文件 acl_dns.h30 行定义.

◆ ACL_DNS_ERR_YXRR

#define ACL_DNS_ERR_YXRR   -7

在文件 acl_dns.h31 行定义.

◆ ACL_DNS_FLAG_ALLOC

#define ACL_DNS_FLAG_ALLOC   (1 << 0) /* 该异步句柄是动态分配的 */

在文件 acl_dns.h63 行定义.

◆ ACL_DNS_FLAG_CHECK_DNS_IP

#define ACL_DNS_FLAG_CHECK_DNS_IP   (1 << 1) /* 检查DNS地址是否匹配 */

在文件 acl_dns.h64 行定义.

◆ ACL_DNS_FLAG_CHECK_DNS_NET

#define ACL_DNS_FLAG_CHECK_DNS_NET   (1 << 2) /* 检查DNS网络是否匹配 */

在文件 acl_dns.h65 行定义.

◆ ACL_DNS_OK

#define ACL_DNS_OK   0

在文件 acl_dns.h23 行定义.

◆ ACL_DNS_OK_CACHE

#define ACL_DNS_OK_CACHE   1

在文件 acl_dns.h24 行定义.

类型定义说明

◆ ACL_DNS

typedef struct ACL_DNS ACL_DNS

◆ ACL_DNS_ADDR

typedef struct ACL_DNS_ADDR ACL_DNS_ADDR

◆ ACL_DNS_REQ

typedef struct ACL_DNS_REQ ACL_DNS_REQ

在文件 acl_dns.h71 行定义.

函数说明

◆ acl_dns_add_dns()

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_dns_add_group()

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_dns_add_host()

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_dns_cancel()

ACL_API void acl_dns_cancel ( ACL_DNS_REQ handle)

取消某个查询事件对象

参数
handle{ACL_DNS_REQ*} 某次域名查询事件

◆ acl_dns_check_dns_ip()

ACL_API void acl_dns_check_dns_ip ( ACL_DNS dns)

设置标志位,检查DNS来源IP地址是否与目标地址相同,若不同则丢弃所读的 数据包,主要是为了防止DNS查询时的UDP攻击

参数
dns{ACL_DNS*} DNS异步查询句柄

◆ acl_dns_check_dns_net()

ACL_API void acl_dns_check_dns_net ( ACL_DNS dns)

设置标志位,检查DNS来源IP所在网段是否与目标网段相同,若不同则丢弃 所读的数据包,主要是为了防止DNS查询时的UDP攻击

参数
dns{ACL_DNS*} DNS异步查询句柄

◆ acl_dns_clear_dns()

ACL_API void acl_dns_clear_dns ( ACL_DNS dns)

清除 DNS 服务器地址列表

参数
dns{ACL_DNS*} DNS异步查询句柄

◆ acl_dns_close()

ACL_API void acl_dns_close ( ACL_DNS dns)

关闭异步查询句柄同时释放所有资源

参数
dns{ACL_DNS*} DNS异步查询句柄

◆ acl_dns_create()

ACL_API ACL_DNS* acl_dns_create ( ACL_AIO aio,
int  timeout 
)

创建一个DNS异步查询对象并同时进行初始化

参数
aio{ACL_AIO*} 异步句柄
timeout{int} 每次DNS查询时的超时值
返回
{ACL_DNS*} DNS异步查询句柄,返回 NULL 表示创建 DNS 查询对象失败

◆ acl_dns_del_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_dns_empty()

ACL_API int acl_dns_empty ( ACL_DNS dns)

判断 DNS 服务器地址列表是否为空

参数
dns{ACL_DNS*} DNS异步查询句柄 @retrn {int} 返回值非 0 表示为空

◆ acl_dns_init()

ACL_API int acl_dns_init ( ACL_DNS dns,
ACL_AIO aio,
int  timeout 
)

初始化DNS异步查询对象结构

参数
dns{ACL_DNS*} DNS异步查询句柄
aio{ACL_AIO*} 异步句柄
timeout{int} 每次DNS查询时的超时值
返回
{int} 初始化是否成功,返回 0 表示成功,-1 表示失败

◆ acl_dns_list()

ACL_API ACL_ARRAY* acl_dns_list ( ACL_DNS dns)

获得 DNS 对象数组列表

参数
dns{ACL_DNS*} DNS异步查询句柄
返回
{ACL_ARRAY*} 容纳 ACL_DNS_ADDR 对象的数组对象,返回值永远非 NULL

◆ acl_dns_lookup()

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_dns_lookup2()

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_dns_open_cache()

ACL_API void acl_dns_open_cache ( ACL_DNS dns,
int  limit 
)

打开DNS缓存机制

参数
dns{ACL_DNS*} DNS异步查询句柄
limit{int} DNS 缓存中最大缓存条目

◆ acl_dns_serror()

ACL_API const char* acl_dns_serror ( int  errnum)

根据错误号得到错误描述信息

参数
errnum{int} DNS查询时返回的错误号
返回
{const char*} 错误描述信息

◆ acl_dns_set_retry_limit()

ACL_API void acl_dns_set_retry_limit ( ACL_DNS dns,
int  retry_limit 
)

设置DNS查询超时时重试次数

参数
dns{ACL_DNS*} DNS异步查询句柄
retry_limit{int} 重试次数

◆ acl_dns_size()

ACL_API size_t acl_dns_size ( ACL_DNS dns)

获得 DNS 服务器地址列表的数量

参数
dns{ACL_DNS*} DNS异步查询句柄
返回
{size_t}