Linux 网络解析工具 adns 的使用教程 (linux adns)
网络是我们现代社会必不可少的一部分,大到全球互联网,小到局域网甚至个人电脑,我们每天都要使用网络。但是,在网络世界中,需要解析的信息实在是太多了,例如域名、IP地址等等,这些信息的解析显得尤为重要。所以,网络解析工具就显得尤为重要。本文将介绍一个Linux网络解析工具——adns。
adns是一个开源的异步DNS解析库,可以解析IPv4和IPv6地址,支持自定义服务端、自定义查询类型等特性,以及多种使用方式。下面将介绍adns的安装和使用方法,尤其是在Linux系统中的应用。
安装adns
adns的安装十分简单,可以使用源码包安装或者在Ubuntu系统下使用apt-get工具安装。
如果您是在Ubuntu系统下安装的话,只需要打开终端执行以下命令:
“`
sudo apt-get install libadns1-dev
“`
如果您想使用源码进行安装,则需要按照以下步骤:
1.下载源码包:
可以在官网(http://www.chiark.greenend.org.uk/~ian/adns/)下载最新的adns源码包。
2.安装依赖:
在安装之前,您需要先安装adns的必备依赖库。这可以通过以下命令安装:
“`
sudo apt-get install build-essential automake autoconf libtool
“`
3.解压源码包:
您可以使用“tar -zxvf”命令解压adns源码包,具体命令如下:
“`
tar -zxvf adns-1.5.1.tar.gz
cd adns-1.5.1
“`
4.编译&安装:
接下来,在安装之前,您需要执行以下命令进行配置:
“`
./configure
“`
当配置执行完成后,您需要使用以下命令进行编译:
“`
make
sudo make install
“`
至此,adns已经成功安装到您的Linux系统中了。
使用adns
adns提供了几种不同的使用方式:
1.使用adns_lookup函数查询 DNS:
adns_lookup() 是adns库的核心函数,它的作用是向域名服务器询问域名对应的 IP 地址。
其函数原型如下:
“`
int adns_lookup(adns_state ads, const char *name, adns_rrtype otype, unsigned int flags, adns_query *query);
“`
由于adns_lookup()接口将DNS解析操作封装了起来,因此它隐藏了DNS解析的具体细节,对使用者而言,只需要提供域名和解析类型即可。
这里举个例子:
“`
#include
int mn(int argc, char **argv) {
adns_state ads;
adns_init(&ads, adns_if_noerrprint, NULL);
adns_query query;
adns_submit(ads, “www.google.com”, adns_r_a, 0, &query,NULL);
adns_answer *answer;
int err = adns_wt(ads, &query, &answer, NULL);
if(0==err) {
printf(“%s\n”,inet_ntoa(((struct in_addr *) answer->item)->s_addr));
adns_free(answer);
}
adns_finish(ads);
return 0;
}
“`
通过以上代码,我们可以向域名服务器查询域名对应的IP地址,例如,“www.google.com”的IP地址是172.217.3.100。
2.指定查询DNS的服务器
使用 adns库的核心函数 adns_init() 来设置DNS服务器的地址,把需要向哪个DNS服务器查询域名对应的IP地址设置进去即可。在进行DNS解析时,adns将会优先向指定DNS服务器发起查询,如果没有成功解析,才会尝试其他DNS服务器。代码示例如下:
“`
adns_init(&ads,adns_if_noerrprint,NULL);
adns_addserver(ads,”192.168.1.1″,0);
adns_query query;
adns_submit(ads, “www.google.com”, adns_r_a, 0, &query,NULL);
“`
3.触发事件进行查询
如果你正在使用类似轮询、统一的主循环等方式进行任务处理,那么可以通过 adns_check() 函数检查是否有DNS解析完成的事件。代码示例如下:
“`
adns_query* queries[100];
while(1) {
unsigned int count = 100;
int err = adns_check(ads,queries,&count,NULL,NULL,NULL);
if(err) {
printf(“error\r\n”);
break;
}
for(int i=0; i
if(queries[i]) {
adns_answer* answer = NULL;
err = adns_getanswer(ads,queries[i], &answer,NULL,NULL,NULL);
if(err==0) {
printf(“host:%s address:%s\r\n”,queries[i]->owner,inet_ntoa(((struct in_addr*)answer->rdata)->s_addr));
}
adns_cancel(ads, queries[i]);
adns_free(answer);
}
}
adns_beforepoll(ads);
usleep(10 * 1000);
adns_afterpoll(ads);
}
“`
注意:以上示例代码是在Linux系统中使用的,如果您想在其他系统中使用adns,需要进行相应的修改。数据来源于网络,所有权归原作者所有。