日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
用linux c實(shí)現(xiàn)高效dns解析 (linux c dns)

用Linux C實(shí)現(xiàn)高效DNS解析

創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),博山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:博山等地區(qū)。博山做網(wǎng)站價(jià)格咨詢:18980820575

DNS(Domn Name System)是指將域名轉(zhuǎn)換成IP地址,以便讓計(jì)算機(jī)之間相互訪問(wèn)的技術(shù)。查找域名對(duì)應(yīng)的IP地址是網(wǎng)絡(luò)通信的基礎(chǔ),因此DNS解析的速度和效率對(duì)于計(jì)算機(jī)的運(yùn)行和網(wǎng)絡(luò)的流暢度有著至關(guān)重要的影響。本文將介紹如何使用Linux C實(shí)現(xiàn)高效的DNS解析。

一、DNS解析的基本原理

DNS解析的基本原理是將域名解析成一個(gè)可用的IP地址,使計(jì)算機(jī)之間可以通過(guò)IP地址訪問(wèn)對(duì)方。例如,當(dāng)我們?cè)跒g覽器中輸入www.google.com時(shí),瀏覽器會(huì)向DNS服務(wù)器發(fā)出請(qǐng)求,詢問(wèn)域名www.google.com對(duì)應(yīng)的IP地址是多少。DNS服務(wù)器會(huì)返回一個(gè)IP地址(例如172.217.25.68),瀏覽器通過(guò)該IP地址就可以連接到Google網(wǎng)站。

DNS服務(wù)器通常由ISP或企業(yè)或組織自己維護(hù),可以是一臺(tái)或多臺(tái)。DNS服務(wù)器通常存儲(chǔ)了所有域名和對(duì)應(yīng)的IP地址,因此DNS解析是一個(gè)非常重要和繁瑣的工作。

二、Linux系統(tǒng)中常用的DNS解析方法

在Linux系統(tǒng)中,常用的DNS解析方法有以下幾種:

1. gethostbyname()函數(shù)

gethostbyname()函數(shù)是C語(yǔ)言中用于DNS解析的函數(shù),使用較為簡(jiǎn)單,但效率不高。該函數(shù)的使用方式如下:

“`c

#include

struct hostent *gethostbyname(const char *name);

“`

在使用該函數(shù)時(shí),需要注意該函數(shù)返回的結(jié)構(gòu)體中并不包含TTL信息,因此無(wú)法判斷該解析結(jié)果是否過(guò)期。此外,由于gethostbyname()函數(shù)會(huì)阻塞進(jìn)程,因此需要單獨(dú)開辟線程進(jìn)行DNS解析。

2. 解析配置文件/etc/hosts

在Linux系統(tǒng)中,/etc/hosts文件是用于本地DNS解析的文件,存儲(chǔ)了一些常用的域名和對(duì)應(yīng)的IP地址,例如:

“`

127.0.0.1 localhost

127.0.0.1 mydomn

“`

在訪問(wèn)mydomn時(shí),系統(tǒng)會(huì)首先去/etc/hosts文件中查找mydomn對(duì)應(yīng)的IP地址,如果找到則直接使用該IP地址進(jìn)行訪問(wèn)。由于/etc/hosts文件是本地存儲(chǔ)的,因此不涉及網(wǎng)絡(luò)通信,可以提升一定的解析速度。

3. 使用DNS緩存

由于DNS解析過(guò)程存在重復(fù)性,因此在Linux系統(tǒng)中可以使用DNS緩存提升解析速度。DNS緩存通常是指本地主機(jī)上對(duì)查詢到的IP地址進(jìn)行緩存,以便下次查詢時(shí)可以直接讀取緩存中的IP地址,從而避免了網(wǎng)絡(luò)通信的開銷。Linux系統(tǒng)中可以使用dnasq等DNS軟件來(lái)實(shí)現(xiàn)DNS緩存。

三、使用Linux C實(shí)現(xiàn)高效DNS解析

由于gethostbyname()函數(shù)的效率較低,因此本文將介紹如何使用Linux C實(shí)現(xiàn)一種高效的DNS解析方法。該方法的主要思路是通過(guò)獲取DNS服務(wù)器的IP地址,手動(dòng)向DNS服務(wù)器發(fā)起查詢,從而提升解析效率。下面是具體的實(shí)現(xiàn)步驟:

1. 獲取DNS服務(wù)器的IP地址

在Linux系統(tǒng)中,DNS服務(wù)器的IP地址通常存儲(chǔ)在/etc/resolv.conf文件中,該文件中包含了域名解析的配置信息??梢允褂靡韵麓a來(lái)獲取DNS服務(wù)器的IP地址:

“`c

#include

#include

int get_dns_server(char *buf, int len) {

FILE *f = fopen(“/etc/resolv.conf”, “r”);

if (!f) {

return -1;

}

char line[1024];

while (fgets(line, sizeof(line), f)) {

if (line[0] == ‘#’ || line[0] == ‘\n’) {

continue;

}

if (!strncmp(line, “nameserver”, 10)) {

char *p = strtok(line + 10, ” \t\n”);

if (!p) {

continue;

}

struct in_addr addr;

addr.s_addr = inet_addr(p);

if (addr.s_addr == INADDR_NONE) {

continue;

}

strncpy(buf, p, len – 1);

buf[len – 1] = ‘\0’;

break;

}

}

fclose(f);

if (buf[0] == ‘\0’) {

return -1;

}

return 0;

}

“`

上述代碼中,get_dns_server()函數(shù)通過(guò)打開/etc/resolv.conf文件來(lái)查找DNS服務(wù)器的IP地址。由于/etc/resolv.conf文件中可能存在多個(gè)DNS服務(wù)器,因此該函數(shù)僅返回查找到的之一個(gè)DNS服務(wù)器的IP地址。

2. 向DNS服務(wù)器發(fā)起查詢

獲取DNS服務(wù)器的IP地址之后,需要向該DNS服務(wù)器發(fā)起DNS查詢請(qǐng)求。DNS查詢請(qǐng)求是一種不同于TCP和UDP的協(xié)議,需要使用RAW Socket進(jìn)行開發(fā)。

RAW Socket是指可以自定義協(xié)議頭的Socket,在Linux系統(tǒng)中可以創(chuàng)建自定義協(xié)議的Socket,從而實(shí)現(xiàn)DNS查詢請(qǐng)求。以下是創(chuàng)建RAW Socket的代碼示例:

“`c

#include

#include

#include

#include

int create_raw_socket(void) {

int fd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);

if (fd == -1) {

return -1;

}

int opt = 1;

if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &opt, sizeof(opt)) == -1) {

close(fd);

return -1;

}

return fd;

}

“`

上述代碼中,create_raw_socket()函數(shù)使用Socket協(xié)議創(chuàng)建了一個(gè)UDP Socket,并通過(guò)setsockopt()函數(shù)設(shè)置了IP_HDRINCL選項(xiàng),該選項(xiàng)指示內(nèi)核使用應(yīng)用程序提供的IP包頭,從而實(shí)現(xiàn)自定義的協(xié)議頭。

調(diào)用create_raw_socket()函數(shù)之后,就可以使用sendto()函數(shù)向DNS服務(wù)器發(fā)起查詢請(qǐng)求,然后使用recvfrom()函數(shù)接收DNS服務(wù)器返回的IP地址信息,從而完成DNS解析過(guò)程了。完整的高效DNS解析代碼如下:

“`c

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define DNS_SERVER_PORT 53

#define DNS_SERVER_ADDR “8.8.8.8”

#define DNS_CLIENT_PORT 5353

#define DNS_CLIENT_ADDR “0.0.0.0”

struct dns_header {

unsigned short id;

unsigned short flags;

unsigned short qdcount; // Question Count

unsigned short ancount; // Answer Count

unsigned short nscount; // Authority Count

unsigned short arcount; // Additional Count

};

struct dns_query {

unsigned short qtype;

unsigned short qclass;

};

int create_raw_socket(void);

int get_dns_server(char *buf, int len);

int send_dns_query(int fd, const char *domn, const char *server);

int resolve_dns_response(const char *buf, size_t buflen);

int mn(int argc, char **argv) {

if (argc

printf(“Usage: %s domn_name\n”, argv[0]);

exit(0);

}

int sock = create_raw_socket();

if (sock == -1) {

perror(“create_raw_socket”);

exit(1);

}

char dns_server[16];

if (get_dns_server(dns_server, sizeof(dns_server)) == -1) {

strncpy(dns_server, DNS_SERVER_ADDR, sizeof(dns_server) – 1);

}

if (send_dns_query(sock, argv[1], dns_server) == -1) {

perror(“send_dns_query”);

close(sock);

exit(1);

}

char buf[1024];

ssize_t n = recvfrom(sock, buf, sizeof(buf), 0, NULL, NULL);

if (n == -1) {

perror(“recvfrom”);

close(sock);

exit(1);

}

int ret = resolve_dns_response(buf, n);

close(sock);

return ret;

}

int create_raw_socket(void) {

int fd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);

if (fd == -1) {

return -1;

}

int opt = 1;

if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &opt, sizeof(opt)) == -1) {

close(fd);

return -1;

}

struct sockaddr_in addr;

addr.sin_family = AF_INET;

addr.sin_port = htons(DNS_CLIENT_PORT);

addr.sin_addr.s_addr = inet_addr(DNS_CLIENT_ADDR);

if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) == -1) {

close(fd);

return -1;

}

return fd;

}

int get_dns_server(char *buf, int len) {

FILE *f = fopen(“/etc/resolv.conf”, “r”);

if (!f) {

return -1;

}

char line[1024];

while (fgets(line, sizeof(line), f)) {

if (line[0] == ‘#’ || line[0] == ‘\n’) {

continue;

}

if (!strncmp(line, “nameserver”, 10)) {

char *p = strtok(line + 10, ” \t\n”);

if (!p) {

continue;

}

struct in_addr addr;

addr.s_addr = inet_addr(p);

if (addr.s_addr == INADDR_NONE) {

continue;

}

strncpy(buf, p, len – 1);

buf[len – 1] = ‘\0’;

break;

}

}

fclose(f);

if (buf[0] == ‘\0’) {

return -1;

}

return 0;

}

int send_dns_query(int fd, const char *domn, const char *server) {

size_t len = strlen(domn);

char *buf = (char *)malloc(sizeof(struct dns_header) + len + 2 + sizeof(struct dns_query));

memset(buf, 0, sizeof(struct dns_header) + len + 2 + sizeof(struct dns_query));

struct dns_header *hdr = (struct dns_header *)buf;

hdr->id = htons(rand() % 65536);

hdr->flags = htons(0x0100); // Standard query

hdr->qdcount = htons(1);

char *pos = buf + sizeof(struct dns_header);

memcpy(pos, domn, len + 1);

for (char *p = pos; *p; ++p) {

if (*p == ‘.’) {

*p = p – pos;

} else {

++*p;

}

}

struct dns_query *qry = (struct dns_query *)(pos + len + 1);

qry->qtype = htons(1); // A record

qry->qclass = htons(1); // IN (Internet)

struct sockaddr_in addr;

addr.sin_family = AF_INET;

addr.sin_port = htons(DNS_SERVER_PORT);

addr.sin_addr.s_addr = inet_addr(server);

ssize_t n = sendto(fd, buf, sizeof(struct dns_header) + len + 2 + sizeof(struct dns_query), 0, (struct sockaddr *)&addr, sizeof(addr));

free(buf);

return (n == -1) ? -1 : 0;

}

int resolve_dns_response(const char *buf, size_t buflen) {

struct dns_header *hdr = (struct dns_header *)buf;

size_t len = ntohs(hdr->qdcount);

if (len == 0) {

printf(“Invalid DNS response: %d\n”, len);

return -1;

}

char *pos = (char *)(buf + sizeof(struct dns_header));

for (size_t i = 0; i

pos += strlen(pos) + 1 + sizeof(struct dns_query);

}

if (pos >= buf + buflen) {

printf(“Invalid DNS response: %p – %p\n”, pos, buf + buflen);

return -1;

}

printf(“%d.%d.%d.%d\n”, pos[0], pos[1], pos[2], pos[3]);

return 0;

}

“`

四、注意事項(xiàng)

使用該方法進(jìn)行DNS解析時(shí),需要注意以下幾點(diǎn):

1. DNS服務(wù)器的IP地址可能會(huì)變動(dòng),因此應(yīng)該定期更新/etc/resolv.conf文件來(lái)及時(shí)更新DNS服務(wù)器的IP地址。

2. DNS查詢請(qǐng)求需要使用RAW Socket,因此需要通過(guò)root權(quán)限運(yùn)行程序。

3. DNS服務(wù)器返回的IP地址可能會(huì)存在多種情況,例如多個(gè)IP地址一起返回(例如cname記錄),因此需要對(duì)DNS服務(wù)器返回的信息進(jìn)行解析。

相關(guān)問(wèn)題拓展閱讀:

  • linux下如何配置DNS服務(wù)器,
  • 寫一個(gè)C語(yǔ)言程序: 能修改Linux 主機(jī)的IP、DHCP、DNS 等設(shè)置

linux下如何配置DNS服務(wù)器,

答案給出的很詳細(xì),可是那是老版本redhat9的配置了。 現(xiàn)在通用的bind9.0使用的是chroot環(huán)境,就是說(shuō)你安裝RHEL5.4的時(shí)候,在/etc/下面是找不到named.conf文件的.簡(jiǎn)要說(shuō)下過(guò)程 如果你用的RHEL5的yum庫(kù)1.安裝#yum install bind* -y#yum install caching-nameserver2.配置主配文件#cd /var/named/chroot/etc/ #cp -a named.caching-nameserver.conf named.conf# vim named.conf主游雀要參饑磨滾數(shù)和以前的bind差不多,都爛余是寫明正向和方向域文件。allow-query 這行要匹配any 否則服務(wù)器就只能你本地使用

linux DNS服務(wù)器配置

基本理論:

DNS系統(tǒng)的作用是把域名和IP對(duì)應(yīng)起來(lái)。

正向解析:根據(jù)域名(主機(jī)名)查找對(duì)應(yīng)的IP地址。

反向解析:根據(jù)IP地址查詢對(duì)應(yīng)的域名(主機(jī)名)。

查詢

遞歸查詢:大多數(shù)客戶機(jī)向蘆前DNS服務(wù)器解析域名的方式。

迭代查詢:大多數(shù)DNS服務(wù)器向其它DNS服務(wù)器解析域名的方式。

DNS服務(wù)器的類型

緩存域名服務(wù)器:也稱唯高速緩存服務(wù)器。通過(guò)向其它域名服務(wù)器查詢獲得域名與IP地址的對(duì)應(yīng)孫伏記錄,將域名查詢結(jié)果緩存到本地,提高重復(fù)查詢時(shí)的速度。

主域名服務(wù)器:特定DNS區(qū)域的官方服務(wù)器陪凱清,具有唯一性。負(fù)責(zé)維護(hù)該區(qū)域內(nèi)的所有域名與IP的映射記錄。

從域名服務(wù)器:也稱輔助域名服務(wù)器。其維護(hù)的域名與IP地址的映射記錄來(lái)源于主域名服務(wù)器。

環(huán)境準(zhǔn)備:

臨時(shí)關(guān)閉selinux和iptables

#setenforce 0

#service iptables stop

查詢相關(guān)軟件包:

# yum search bind

Loaded plugins: product-id, refresh-packagekit, subscription-manager

Updating Red Hat repositories.

====================================================================================== N/S Matched: bind ======================================================================================

PackageKit-device-rebind.i686 : Device rebind functionality for PackageKit

bind.i686 : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server

bind-chroot.i686 : A chroot runtime environment for the ISC BIND DNS server, named(8)

bind-utils.i686 : Utilities for querying DNS name servers

其中各軟件包的作用如下:

bind: 提供域名服務(wù)的主要程序及相關(guān)文件。

bind-chroot:為bind提供一個(gè)偽裝的根目錄以增強(qiáng)安全性。

bind-utils:提供對(duì)DNS服務(wù)器測(cè)試的工具程序(如nslookup、dig等)。

安裝BIND軟件包#yum install *bind*

配置DNS服務(wù)器:

bind服務(wù)器端程序

主要執(zhí)行程序:/usr/in/named

服務(wù)腳本:、etc/init.d/named

默認(rèn)監(jiān)聽(tīng)端口:53

主配置文件: /etc/named.conf

保存DNS解析記錄的數(shù)據(jù)文件: /var/named/chroot/var/named

查詢bind程序的配置文件列表

# rpm -qc bind

/etc/logrotate.d/named

/etc/named.conf

/etc/named.iscdlv.key

/etc/named.rfc1912.zones

/etc/named.root.key

/etc/rndc.conf

/etc/rndc.key

/etc/sysconfig/named

/var/named/named.ca

/var/named/named.empty

/var/named/named.localhost

/var/named/named.loopback

查看主配置文件named.conf

#vim /etc/named.conf

主配置文件解析:

全局配置部分:

默認(rèn)的全局配置項(xiàng)如下:

10 options {

listen-on port 53 { 127.0.0.1; }; //監(jiān)聽(tīng)的端口和接口IP地址

listen-on-v6 port 53 { ::1; };

directory”/var/named”;//dns區(qū)域的數(shù)據(jù)文件默認(rèn)存放位置

dump-file”/var/named/data/cache_dump.db”;

statistics-file “/var/named/data/named_stats.txt”;

memstatistics-file “/var/named/data/named_mem_stats.txt”;

allow-query { localhost; }; //允許dns查詢的客戶機(jī)列表,any表示所有

recursion yes;//是否允許客戶機(jī)進(jìn)行遞歸查詢

19

dnssec-enable yes;

dnssec-validation yes;

dnssec-lookaside auto;

23

/* Path to ISC DLV key */

bindkeys-file “/etc/named.iscdlv.key”;

26 };

全局配置中還有如下選項(xiàng):

forwarders {202.102.24.68;12.3.3.3;};//將本域名服務(wù)器不能解析的條目轉(zhuǎn)發(fā)給其它DNS服務(wù)器的IP地址

默認(rèn)的區(qū)域配置項(xiàng)如下:

35 zone “.” IN {

type hint; //區(qū)域類型。hint為根區(qū)域;master為主區(qū)域; slave為輔助區(qū)域

file “named.ca”;//該區(qū)域?qū)?yīng)的區(qū)域數(shù)據(jù)配置文件名

38 };

區(qū)域配置中還有如下選項(xiàng):

allow-transfer {189.98.90.23;};//允許下載區(qū)域數(shù)據(jù)庫(kù)的從域名服務(wù)器IP地址

allow-update {none;};//允許動(dòng)態(tài)更新的客戶端IP地址(none表示全部禁止)

添加如下區(qū)域配置:

zone “my.com” IN {

type master;//主區(qū)域

file “my.com”; //該區(qū)域?qū)?yīng)的區(qū)域數(shù)據(jù)配置文件名

allow-transfer {192.168.153.1;};//允許下載區(qū)域數(shù)據(jù)庫(kù)的從域名服務(wù)器IP地址

allow-update {none;};

};

zone “153.168.192.in-addr.arpa” IN { //表示針對(duì)IP192.168.153.130反向解析

type master;//主區(qū)域

file “192.168.153.my.arpa”;//該區(qū)域?qū)?yīng)的區(qū)域數(shù)據(jù)配置文件名

};

配置完了,可以執(zhí)行如下命令對(duì)named.conf文件進(jìn)行語(yǔ)法檢查。

#named-checkconf

注意:倒序網(wǎng)絡(luò)地址.in-addr.arpa 表示反向區(qū)域

主配置文件最后還有一行是:

include “/etc/named.rfc1912.zones”//該文件包含/etc/named.rfc1912.zones文件

區(qū)域數(shù)據(jù)配置文件:

先看一下named.localhost的內(nèi)容:

$TTL 1D//time to live 生存時(shí)間

@IN SOA @ rname.invalid. ( //”rname.invalid”DNS區(qū)域地址

; serial //更新序列號(hào)

D ; refresh //更新時(shí)間

H ; retry //重試延時(shí)

W ; expire //失效時(shí)間

H ) ; minimum//無(wú)效地址解析記錄的默認(rèn)緩存時(shí)間

NS @//name server 域名服務(wù)記錄

A.0.0. //address 只用在正向解析的區(qū)域數(shù)據(jù)文件中

AAAA ::1

新建2個(gè)對(duì)應(yīng)的區(qū)域數(shù)據(jù)配置文件:

#touch my.com

#touch 192.168.153.my.arpa

#vim my.com

$TTL 86400

@ IN SOA my.com. admin.my.com (//admin.myNaN為該區(qū)域管理員的郵箱地址

201

H

M

W

D

)

@IN NS ns1.my.com.//當(dāng)前域的DNS服務(wù)器地址

IN MXmail.my.com.//用于設(shè)置當(dāng)前域的郵件服務(wù)器域名地址,數(shù)字10表示優(yōu)先級(jí)別,數(shù)字越大優(yōu)先級(jí)越低

ns1 IN A.168.153.130

mail IN A.168.153.130

www IN A.168.153.130

ftp IN CNAME www //CNAME別名(canonical name)記錄,表示ftp.my.com和

www.my.com

對(duì)應(yīng)同一個(gè)IP.

# vim 192.168.153.my.arpa

$TTL 86400

@ IN SOA my.com. admin.my.com (

201

H

M

W

D

)

@IN NS ns1.my.com.

INPTR ftp.my.com

啟動(dòng)DNS服務(wù)

# service named start

測(cè)試:

配置一臺(tái)ftp服務(wù)器用于測(cè)試:

#service vsftpd start//啟動(dòng)vsftpd服務(wù)

當(dāng)前網(wǎng)卡的配置:

eth0: 192.168.0.1/24

eth1: 192.168.153.130/24

# nslookup 192.168.153.130

Server: 127.0.0.1

Address: 127.0.0.1#53

130.153.168.192.in-addr.arpaname =

www.my.com

.

# nslookup ftp.my.com

Server: 127.0.0.1

Address: 127.0.0.1#53

ftp.my.comcanonical name =

www.my.com

.

Name:

www.my.com

Address: 192.168.153.130

測(cè)試成功

在linux下配置DNS服務(wù)器,下面是配置過(guò)程中設(shè)置過(guò)的一些文件,

/etc/hosts 文件的具體內(nèi)容如下:

# Do not remove the following line, or various programs

# that require network functionality will fail.

127.0.0.1 localhost.localdomain localhost fc4

192.168.1.3 a.test.com a

192.168.1.1 b.test.cn b

/etc/host.conf 文件:

order hosts,bind

表示先用hosts文件做解析,春改在用DNS解析

/etc/resolv.conf 文件:

; generated by NetworkManager, do not edit!

search test.com

nameserver 127.0.0.1

search test.cn

扒談判 nameserver 192.168.1.1

nameserver 61.144.56.100

/etc/named.conf 文侍氏件:

//

// named.conf for Red Hat caching-nameserver

//

options {

directory “/var/named”;

dump-file “/var/named/data/cache_dump.db”;

statistics-file “/var/named/data/named_stats.txt”;

/*

* If there is a firewall between you and nameservers you want

* to talk to, you might need to uncomment the query-source

* directive below. Previous versions of BIND always asked

* questions using port 53, but BIND 8.1 uses an unprivileged

* port by default.

*/

// query-source address * port 53;

};

//

// a caching only nameserver config

//

controls {

inet 127.0.0.1 allow { localhost; } keys { rndckey; };

};

zone “.” IN {

type hint;

file “named.ca”;

};

zone “test.com”IN {

type master;

file “test.com”;

allow-update { none; };

};

zone “1.168.192.in-addr.arpa”IN {

type master;

file “192.168.1.rev”;

allow-update { none; };

};

zone “test.cn”IN {

type master;

file “test.cn”;

allow-update { none; };

};

zone “0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa” IN {

type master;

file “named.ip6.local”;

allow-update { none; };

};

zone “255.in-addr.arpa” IN {

type master;

file “named.broadcast”;

allow-update { none; };

};

zone “0.in-addr.arpa” IN {

type master;

file “named.zero”;

allow-update { none; };

};

include “/etc/rndc.key”;

在/var/name/test.com 文件下:

$TTL

@ IN SOA a.test.com. root.a.test.com (

42 ; serial (d. adams)

3H ; refresh

15M ; retry

1W ; expiry

1D ) ; minimum

IN NS a.test.com.

IN MX 10 mail.test.com.

a IN A 192.168.1.3

mail IN A 192.168.1.3

//其中root.a.test.com的含義是管理員的郵箱

/var/name/test.cn 文件下:

$TTL

@ IN SOA b.test.cn. root.a.test.com (

42 ; serial (d. adams)

3H ; refresh

15M ; retry

1W ; expiry

1D ) ; minimum

IN NS b.test.cn.

IN MX 10 mail.test.cn.

b IN A 192.168.1.1

mail IN A 192.168.1.1

/var/name/192.168.1.rev 文件下:

$TTL

@ IN SOA 1.168.192.in-addr.arpa. root.test.com. (

; Serial

; Refresh

; Retry

; Expire

) ; Minimum

IN NS a.test.com.

IN NS b.test.cn.

IN MX 10 mail.test.com.

IN MX 10 mail.test.cn.

3 IN PTR a.test.com.

3 IN PTR mail.test.com.

1 IN PTR b.test.cn.

1 IN PTR mail.test.cn.

然后用/etc/init.d/named restart重啟DNS服務(wù),在重啟過(guò)程中,我曾經(jīng)出現(xiàn)過(guò)好幾次的錯(cuò)誤,按照出錯(cuò)的提示,會(huì)提示是named.conf文件第幾行出錯(cuò)的?;蛘咛崾驹谀切┌募鐃est.cn這些文件里面的問(wèn)題,然后一個(gè)一個(gè)排除。

最后還有一些nslookup的命令比較有用:

set all用于顯示使用nslookup工具這臺(tái)機(jī)器上的DNS服務(wù)器的一些信息

set type=any會(huì)顯示完整信息包括域中郵件服務(wù)器和主從DNS服務(wù)器的名字和IP地址

server 192.168.0.1更換查詢的DNS服務(wù)器地址

寫一個(gè)C語(yǔ)言程序: 能修改Linux 主機(jī)的IP、DHCP、DNS 等設(shè)置

5月8日

21:10

dns所要的包:

bind-*

bind-devel-*

bind-utils-*

caching-nameserver-*

redhat-config-bind-*

具體在那張盤我就記不太清楚了,你可枝侍侍以放進(jìn)去試,反正總共才3張盤。

關(guān)于linux安裝程序,比windows要猛吵復(fù)雜一點(diǎn),一般的就是執(zhí)行一個(gè)configure腳本,但是不是每個(gè)軟件都是這么安裝,你可以看一下包內(nèi)的readme.txt,或

readme.txt文件,你們一定有詳細(xì)的添談畢加刪除應(yīng)用軟件的步驟。

可以調(diào)用system()函圓中數(shù)。把linux系統(tǒng)命令拼成字符串,然后調(diào)用system去執(zhí)行這個(gè)字符串就可以了。修改系統(tǒng)配置,需要root身份。

1、system函數(shù):

原型:int

system(const

char

*

command);

功能:執(zhí)行

dos(windows系統(tǒng))

shell(Linux/Unix系統(tǒng))

命令,參數(shù)字符串command為命令名;

說(shuō)明:在windows系統(tǒng)中,system函數(shù)直接在控制臺(tái)調(diào)用一個(gè)command命令。在Linux/Unix系統(tǒng)中,system函孫扮數(shù)會(huì)調(diào)用fork函數(shù)產(chǎn)生子進(jìn)程,由子進(jìn)程來(lái)執(zhí)行command命令,命令橘凱山執(zhí)行完后隨即返回原調(diào)用的進(jìn)程;

頭文件:stdlib.h;

返回值:命令執(zhí)行成功返回0,執(zhí)行失敗返回-1。

2、例程:

#include

#include

int main(){

system(“del C:\\123.txt”);//在控制臺(tái)中,執(zhí)行命令del C:\\123.txt,刪除C盤目錄下的123.txt文件

return 0;

}

如果是在LINUX下面用的話,寫一個(gè)交互友好一點(diǎn)的SHELL腳本是罩念代價(jià)最小的,要想用C語(yǔ)言實(shí)現(xiàn)代價(jià)實(shí)在太高,光ifconfig/route的源碼分析就很多了,還不說(shuō)DHCP、DNS和用戶管理什么的了。

其實(shí)以上這些需求直接都孫好有物凱困現(xiàn)成的指令或系統(tǒng)調(diào)用,用Shell加工一下就OK了。

關(guān)于linux c dns的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營(yíng)銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。


本文標(biāo)題:用linux c實(shí)現(xiàn)高效dns解析 (linux c dns)
轉(zhuǎn)載來(lái)于:http://www.5511xx.com/article/cojhigg.html