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

📄 host.c

📁 bind-3.2.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * 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 INTERNET SOFTWARE CONSORTIUM * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL * INTERNET SOFTWARE CONSORTIUM 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 2003/07/25 04:36:44 marka Exp $ */#include <config.h>#include <stdlib.h>#include <limits.h>#include <isc/app.h>#include <isc/commandline.h>#include <isc/netaddr.h>#include <isc/string.h>#include <isc/util.h>#include <isc/task.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 ISC_LIST(dig_server_t) server_list;extern ISC_LIST(dig_searchlist_t) search_list;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 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"};static const char *rtypetext[] = {	"zero",				/* 0 */	"has address",			/* 1 */	"name server",			/* 2 */	"MD",				/* 3 */	"MF",				/* 4 */	"is an alias for",		/* 5 */	"SOA",				/* 6 */	"MB",				/* 7 */	"MG",				/* 8 */	"MR",				/* 9 */	"NULL",				/* 10 */	"has well known services",	/* 11 */	"domain name pointer",		/* 12 */	"host information",		/* 13 */	"MINFO",			/* 14 */	"mail is handled by",	       	/* 15 */	"text",				/* 16 */	"RP",				/* 17 */	"AFSDB",			/* 18 */	"x25 address",			/* 19 */	"isdn address",			/* 20 */	"RT",				/* 21 */	"NSAP",				/* 22 */	"NSAP_PTR",			/* 23 */	"has signature",		/* 24 */	"has key",			/* 25 */	"PX",				/* 26 */	"GPOS",				/* 27 */	"has AAAA address",		/* 28 */	"LOC",				/* 29 */	"has next record",		/* 30 */	"EID",				/* 31 */	"NIMLOC",			/* 32 */	"SRV",				/* 33 */	"ATMA",				/* 34 */	"NAPTR",			/* 35 */	"KX",				/* 36 */	"CERT",				/* 37 */	"has v6 address",		/* 38 */	"DNAME",			/* 39 */	"has optional information",	/* 41 */	"has 42 record",       		/* 42 */	"has 43 record",       		/* 43 */	"has 44 record",       		/* 44 */	"has 45 record",       		/* 45 */	"has 46 record",       		/* 46 */	"has 47 record",       		/* 47 */	"has 48 record",       		/* 48 */	"has 49 record",       		/* 49 */	"has 50 record",       		/* 50 */	"has 51 record",       		/* 51 */	"has 52 record",       		/* 52 */	"has 53 record",       		/* 53 */	"has 54 record",       		/* 54 */	"has 55 record",       		/* 55 */	"has 56 record",       		/* 56 */	"has 57 record",       		/* 57 */	"has 58 record",       		/* 58 */	"has 59 record",       		/* 59 */	"has 60 record",       		/* 60 */	"has 61 record",       		/* 61 */	"has 62 record",       		/* 62 */	"has 63 record",       		/* 63 */	"has 64 record",       		/* 64 */	"has 65 record",       		/* 65 */	"has 66 record",       		/* 66 */	"has 67 record",       		/* 67 */	"has 68 record",       		/* 68 */	"has 69 record",       		/* 69 */	"has 70 record",       		/* 70 */	"has 71 record",       		/* 71 */	"has 72 record",       		/* 72 */	"has 73 record",       		/* 73 */	"has 74 record",       		/* 74 */	"has 75 record",       		/* 75 */	"has 76 record",       		/* 76 */	"has 77 record",       		/* 77 */	"has 78 record",       		/* 78 */	"has 79 record",       		/* 79 */	"has 80 record",       		/* 80 */	"has 81 record",       		/* 81 */	"has 82 record",       		/* 82 */	"has 83 record",       		/* 83 */	"has 84 record",       		/* 84 */	"has 85 record",       		/* 85 */	"has 86 record",       		/* 86 */	"has 87 record",       		/* 87 */	"has 88 record",       		/* 88 */	"has 89 record",       		/* 89 */	"has 90 record",       		/* 90 */	"has 91 record",       		/* 91 */	"has 92 record",       		/* 92 */	"has 93 record",       		/* 93 */	"has 94 record",       		/* 94 */	"has 95 record",       		/* 95 */	"has 96 record",       		/* 96 */	"has 97 record",       		/* 97 */	"has 98 record",       		/* 98 */	"has 99 record",       		/* 99 */	"UINFO",			/* 100 */	"UID",				/* 101 */	"GID",				/* 102 */	"UNSPEC"};			/* 103 */static voidshow_usage(void) {	fputs("Usage: host [-aCdlrTwv] [-c class] [-n] [-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 Use the old IN6.INT form of IPv6 reverse lookup\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", stderr);	exit(1);}voiddighost_shutdown(void) {	isc_app_shutdown();}voidreceived(int bytes, isc_sockaddr_t *from, dig_query_t *query){	isc_time_t now;	isc_result_t result;	int diff;	if (!short_form) {		char fromtext[ISC_SOCKADDR_FORMATSIZE];		isc_sockaddr_format(from, fromtext, sizeof(fromtext));		result = isc_time_now(&now);		check_result(result, "isc_time_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);}static 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;	const char *rtt;	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);

⌨️ 快捷键说明

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