⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 host.c

📁 bind 9.3结合mysql数据库
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) 2004  Internet Systems Consortium, Inc. ("ISC") * Copyright (C) 2000-2003  Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR * PERFORMANCE OF THIS SOFTWARE. *//* $Id: host.c,v 1.76.2.5.2.9 2004/04/13 03:00:06 marka Exp $ */#include <config.h>#include <limits.h>#include <isc/app.h>#include <isc/commandline.h>#include <isc/netaddr.h>#include <isc/print.h>#include <isc/string.h>#include <isc/util.h>#include <isc/task.h>#include <isc/stdlib.h>#include <dns/byaddr.h>#include <dns/fixedname.h>#include <dns/message.h>#include <dns/name.h>#include <dns/rdata.h>#include <dns/rdataclass.h>#include <dns/rdataset.h>#include <dns/rdatatype.h>#include <dig/dig.h>extern ISC_LIST(dig_lookup_t) lookup_list;extern dig_serverlist_t server_list;extern ISC_LIST(dig_searchlist_t) search_list;extern isc_boolean_t have_ipv4, have_ipv6;extern isc_boolean_t usesearch;extern isc_boolean_t debugging;extern unsigned int timeout;extern isc_mem_t *mctx;extern int ndots;extern int tries;extern char *progname;extern isc_task_t *global_task;extern int fatalexit;static isc_boolean_t short_form = ISC_TRUE, listed_server = ISC_FALSE;static isc_boolean_t default_lookups = ISC_TRUE;static int seen_error = -1;static isc_boolean_t list_addresses = ISC_TRUE;static dns_rdatatype_t list_type = dns_rdatatype_a;static const char *opcodetext[] = {	"QUERY",	"IQUERY",	"STATUS",	"RESERVED3",	"NOTIFY",	"UPDATE",	"RESERVED6",	"RESERVED7",	"RESERVED8",	"RESERVED9",	"RESERVED10",	"RESERVED11",	"RESERVED12",	"RESERVED13",	"RESERVED14",	"RESERVED15"};static const char *rcodetext[] = {	"NOERROR",	"FORMERR",	"SERVFAIL",	"NXDOMAIN",	"NOTIMP",	"REFUSED",	"YXDOMAIN",	"YXRRSET",	"NXRRSET",	"NOTAUTH",	"NOTZONE",	"RESERVED11",	"RESERVED12",	"RESERVED13",	"RESERVED14",	"RESERVED15",	"BADVERS"};struct rtype {	unsigned int type;	const char *text;};struct rtype rtypes[] = {	{ 1, 	"has address" },	{ 2, 	"name server" },	{ 5, 	"is an alias for" },	{ 11,	"has well known services" },	{ 12,	"domain name pointer" },	{ 13,	"host information" },	{ 15,	"mail is handled by" },	{ 16,	"descriptive text" },	{ 19,	"x25 address" },	{ 20,	"ISDN address" },	{ 24,	"has signature" },	{ 25,	"has key" },	{ 28,	"has IPv6 address" },	{ 29,	"location" },	{ 0, NULL }};static voidshow_usage(void) {	fputs("Usage: host [-aCdlriTwv] [-c class] [-N ndots] [-t type] [-W time]\n""            [-R number] hostname [server]\n""       -a is equivalent to -v -t *\n""       -c specifies query class for non-IN data\n""       -C compares SOA records on authoritative nameservers\n""       -d is equivalent to -v\n""       -l lists all hosts in a domain, using AXFR\n""       -i IP6.INT reverse lookups\n""       -N changes the number of dots allowed before root lookup is done\n""       -r disables recursive processing\n""       -R specifies number of retries for UDP packets\n""       -t specifies the query type\n""       -T enables TCP/IP mode\n""       -v enables verbose output\n""       -w specifies to wait forever for a reply\n""       -W specifies how long to wait for a reply\n""       -4 use IPv4 query transport only\n""       -6 use IPv6 query transport only\n", stderr);	exit(1);}voiddighost_shutdown(void) {	isc_app_shutdown();}voidreceived(int bytes, isc_sockaddr_t *from, dig_query_t *query) {	isc_time_t now;	int diff;	if (!short_form) {		char fromtext[ISC_SOCKADDR_FORMATSIZE];		isc_sockaddr_format(from, fromtext, sizeof(fromtext));		TIME_NOW(&now);		diff = (int) isc_time_microdiff(&now, &query->time_sent);		printf("Received %u bytes from %s in %d ms\n",		       bytes, fromtext, diff/1000);	}}voidtrying(char *frm, dig_lookup_t *lookup) {	UNUSED(lookup);	if (!short_form)		printf("Trying \"%s\"\n", frm);}static voidsay_message(dns_name_t *name, const char *msg, dns_rdata_t *rdata,	    dig_query_t *query){	isc_buffer_t *b = NULL;	char namestr[DNS_NAME_FORMATSIZE];	isc_region_t r;	isc_result_t result;	unsigned int bufsize = BUFSIZ;	dns_name_format(name, namestr, sizeof(namestr)); retry:	result = isc_buffer_allocate(mctx, &b, bufsize);	check_result(result, "isc_buffer_allocate");	result = dns_rdata_totext(rdata, NULL, b);	if (result == ISC_R_NOSPACE) {		isc_buffer_free(&b);		bufsize *= 2;		goto retry;	}	check_result(result, "dns_rdata_totext");	isc_buffer_usedregion(b, &r);	if (query->lookup->identify_previous_line) {		printf("Nameserver %s:\n\t",			query->servname);	}	printf("%s %s %.*s", namestr,	       msg, (int)r.length, (char *)r.base);	if (query->lookup->identify) {		printf(" on server %s", query->servname);	}	printf("\n");	isc_buffer_free(&b);}#ifdef DIG_SIGCHASE/* Just for compatibility : not use in host program */isc_result_tprintrdataset(dns_name_t *owner_name, dns_rdataset_t *rdataset,	      isc_buffer_t *target){  UNUSED(owner_name);  UNUSED(rdataset);  UNUSED(target);  return(ISC_FALSE);}#endifstatic isc_result_tprintsection(dns_message_t *msg, dns_section_t sectionid,	     const char *section_name, isc_boolean_t headers,	     dig_query_t *query){	dns_name_t *name, *print_name;	dns_rdataset_t *rdataset;	dns_rdata_t rdata = DNS_RDATA_INIT;	isc_buffer_t target;	isc_result_t result, loopresult;	isc_region_t r;	dns_name_t empty_name;	char t[4096];	isc_boolean_t first;	isc_boolean_t no_rdata;	if (sectionid == DNS_SECTION_QUESTION)		no_rdata = ISC_TRUE;	else		no_rdata = ISC_FALSE;	if (headers)		printf(";; %s SECTION:\n", section_name);	dns_name_init(&empty_name, NULL);	result = dns_message_firstname(msg, sectionid);	if (result == ISC_R_NOMORE)		return (ISC_R_SUCCESS);	else if (result != ISC_R_SUCCESS)		return (result);	for (;;) {		name = NULL;		dns_message_currentname(msg, sectionid, &name);		isc_buffer_init(&target, t, sizeof(t));		first = ISC_TRUE;		print_name = name;		for (rdataset = ISC_LIST_HEAD(name->list);		     rdataset != NULL;		     rdataset = ISC_LIST_NEXT(rdataset, link)) {			if (query->lookup->rdtype == dns_rdatatype_axfr &&			    !((!list_addresses &&			       (list_type == dns_rdatatype_any ||			        rdataset->type == list_type)) ||			      (list_addresses &&			       (rdataset->type == dns_rdatatype_a ||			        rdataset->type == dns_rdatatype_aaaa ||				rdataset->type == dns_rdatatype_ns ||				rdataset->type == dns_rdatatype_ptr))))				continue;			if (!short_form) {				result = dns_rdataset_totext(rdataset,							     print_name,							     ISC_FALSE,							     no_rdata,							     &target);				if (result != ISC_R_SUCCESS)					return (result);#ifdef USEINITALWS				if (first) {					print_name = &empty_name;					first = ISC_FALSE;				}#else				UNUSED(first); /* Shut up compiler. */#endif			} else {				loopresult = dns_rdataset_first(rdataset);				while (loopresult == ISC_R_SUCCESS) {					struct rtype *t;					const char *rtt;					char typebuf[DNS_RDATATYPE_FORMATSIZE];					char typebuf2[DNS_RDATATYPE_FORMATSIZE						     + 20];					dns_rdataset_current(rdataset, &rdata);					for (t = rtypes; t->text != NULL; t++) {						if (t->type == rdata.type) {							rtt = t->text;							goto found;						}					}					dns_rdatatype_format(rdata.type,							     typebuf,							     sizeof(typebuf));					snprintf(typebuf2, sizeof(typebuf2),						 "has %s record", typebuf);					rtt = typebuf2;				found:					say_message(print_name, rtt,						    &rdata, query);					dns_rdata_reset(&rdata);					loopresult =						dns_rdataset_next(rdataset);				}			}		}		if (!short_form) {			isc_buffer_usedregion(&target, &r);			if (no_rdata)				printf(";%.*s", (int)r.length,				       (char *)r.base);			else				printf("%.*s", (int)r.length, (char *)r.base);		}		result = dns_message_nextname(msg, sectionid);		if (result == ISC_R_NOMORE)			break;		else if (result != ISC_R_SUCCESS)			return (result);	}	return (ISC_R_SUCCESS);}static isc_result_tprintrdata(dns_message_t *msg, dns_rdataset_t *rdataset, dns_name_t *owner,	   const char *set_name, isc_boolean_t headers){	isc_buffer_t target;	isc_result_t result;	isc_region_t r;	char t[4096];	UNUSED(msg);	if (headers)		printf(";; %s SECTION:\n", set_name);	isc_buffer_init(&target, t, sizeof(t));	result = dns_rdataset_totext(rdataset, owner, ISC_FALSE, ISC_FALSE,				     &target);	if (result != ISC_R_SUCCESS)		return (result);	isc_buffer_usedregion(&target, &r);	printf("%.*s", (int)r.length, (char *)r.base);	return (ISC_R_SUCCESS);}isc_result_tprintmessage(dig_query_t *query, dns_message_t *msg, isc_boolean_t headers) {	isc_boolean_t did_flag = ISC_FALSE;	dns_rdataset_t *opt, *tsig = NULL;	dns_name_t *tsigname;	isc_result_t result = ISC_R_SUCCESS;	int force_error;	UNUSED(headers);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -