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

📄 host.c

📁 bind-3.2.
💻 C
📖 第 1 页 / 共 2 页
字号:
				while (loopresult == ISC_R_SUCCESS) {					dns_rdataset_current(rdataset, &rdata);					if (rdata.type <= 103)						rtt = rtypetext[rdata.type];					else if (rdata.type == 249)						rtt = "key";					else if (rdata.type == 250)						rtt = "signature";					else						rtt = "unknown";					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;	UNUSED(headers);	if (listed_server) {		char sockstr[ISC_SOCKADDR_FORMATSIZE];		printf("Using domain server:\n");		printf("Name: %s\n", query->servname);		isc_sockaddr_format(&query->sockaddr, sockstr,				    sizeof(sockstr));		printf("Address: %s\n", sockstr);		printf("Aliases: \n\n");	}	if (msg->rcode != 0) {		char namestr[DNS_NAME_FORMATSIZE];		dns_name_format(query->lookup->name, namestr, sizeof(namestr));		printf("Host %s not found: %d(%s)\n", namestr,		       msg->rcode, rcodetext[msg->rcode]);		return (ISC_R_SUCCESS);	}	if (!short_form) {		printf(";; ->>HEADER<<- opcode: %s, status: %s, id: %u\n",		       opcodetext[msg->opcode], rcodetext[msg->rcode],		       msg->id);		printf(";; flags: ");		if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0) {			printf("qr");			did_flag = ISC_TRUE;		}		if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0) {			printf("%saa", did_flag ? " " : "");			did_flag = ISC_TRUE;		}		if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0) {			printf("%stc", did_flag ? " " : "");			did_flag = ISC_TRUE;		}		if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0) {			printf("%srd", did_flag ? " " : "");			did_flag = ISC_TRUE;		}		if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0) {			printf("%sra", did_flag ? " " : "");			did_flag = ISC_TRUE;		}		if ((msg->flags & DNS_MESSAGEFLAG_AD) != 0) {			printf("%sad", did_flag ? " " : "");			did_flag = ISC_TRUE;		}		if ((msg->flags & DNS_MESSAGEFLAG_CD) != 0) {			printf("%scd", did_flag ? " " : "");			did_flag = ISC_TRUE;		}		printf("; QUERY: %u, ANSWER: %u, "		       "AUTHORITY: %u, ADDITIONAL: %u\n",		       msg->counts[DNS_SECTION_QUESTION],		       msg->counts[DNS_SECTION_ANSWER],		       msg->counts[DNS_SECTION_AUTHORITY],		       msg->counts[DNS_SECTION_ADDITIONAL]);		opt = dns_message_getopt(msg);		if (opt != NULL)			printf(";; EDNS: version: %u, udp=%u\n",			       (unsigned int)((opt->ttl & 0x00ff0000) >> 16),			       (unsigned int)opt->rdclass);		tsigname = NULL;		tsig = dns_message_gettsig(msg, &tsigname);		if (tsig != NULL)			printf(";; PSEUDOSECTIONS: TSIG\n");	}	if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_QUESTION]) &&	    !short_form) {		printf("\n");		result = printsection(msg, DNS_SECTION_QUESTION, "QUESTION",				      ISC_TRUE, query);		if (result != ISC_R_SUCCESS)			return (result);	}	if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_ANSWER])) {		if (!short_form)			printf("\n");		result = printsection(msg, DNS_SECTION_ANSWER, "ANSWER",				      ISC_TF(!short_form), query);		if (result != ISC_R_SUCCESS)			return (result);	}	if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_AUTHORITY]) &&	    !short_form) {		printf("\n");		result = printsection(msg, DNS_SECTION_AUTHORITY, "AUTHORITY",				      ISC_TRUE, query);		if (result != ISC_R_SUCCESS)			return (result);	}	if (! ISC_LIST_EMPTY(msg->sections[DNS_SECTION_ADDITIONAL]) &&	    !short_form) {		printf("\n");		result = printsection(msg, DNS_SECTION_ADDITIONAL,				      "ADDITIONAL", ISC_TRUE, query);		if (result != ISC_R_SUCCESS)			return (result);	}	if ((tsig != NULL) && !short_form) {		printf("\n");		result = printrdata(msg, tsig, tsigname,				    "PSEUDOSECTION TSIG", ISC_TRUE);		if (result != ISC_R_SUCCESS)			return (result);	}	if (!short_form)		printf("\n");	return (result);}static voidparse_args(isc_boolean_t is_batchfile, int argc, char **argv) {	char hostname[MXNAME];	dig_server_t *srv;	dig_lookup_t *lookup;	int c;	char store[MXNAME];	isc_textregion_t tr;	isc_result_t result = ISC_R_SUCCESS;	dns_rdatatype_t rdtype;	dns_rdataclass_t rdclass;	UNUSED(is_batchfile);	lookup = make_empty_lookup();	while ((c = isc_commandline_parse(argc, argv, "ilvwrdt:c:aTCN:R:W:Dn"))	       != EOF) {		switch (c) {		case 'l':			lookup->tcp_mode = ISC_TRUE;			lookup->rdtype = dns_rdatatype_axfr;			lookup->rdtypeset = ISC_TRUE;			fatalexit = 3;			break;		case 'v':		case 'd':			short_form = ISC_FALSE;			break;		case 'r':			lookup->recurse = ISC_FALSE;			break;		case 't':			tr.base = isc_commandline_argument;			tr.length = strlen(isc_commandline_argument);			result = dns_rdatatype_fromtext(&rdtype,						   (isc_textregion_t *)&tr);			if (result != ISC_R_SUCCESS) {				fatalexit = 2;				fatal("invalid type: %s\n",				      isc_commandline_argument);			} 			if (!lookup->rdtypeset ||			    lookup->rdtype != dns_rdatatype_axfr)				lookup->rdtype = rdtype;			if (rdtype == dns_rdatatype_axfr) {				/* -l -t any -v */				list_type = dns_rdatatype_any;				short_form = ISC_FALSE;				lookup->tcp_mode = ISC_TRUE;			} else				list_type = rdtype;			list_addresses = ISC_FALSE;			break;		case 'c':			tr.base = isc_commandline_argument;			tr.length = strlen(isc_commandline_argument);			result = dns_rdataclass_fromtext(&rdclass,						   (isc_textregion_t *)&tr);			if (result != ISC_R_SUCCESS) {				fatalexit = 2;				fatal("invalid class: %s\n",				      isc_commandline_argument);			} else {				lookup->rdclass = rdclass;				lookup->rdclassset = ISC_TRUE;			}			break;		case 'a':			if (!lookup->rdtypeset ||			    lookup->rdtype != dns_rdatatype_axfr)				lookup->rdtype = dns_rdatatype_any;			list_type = dns_rdatatype_any;			list_addresses = ISC_FALSE;			lookup->rdtypeset = ISC_TRUE;			short_form = ISC_FALSE;			break;		case 'i':			lookup->ip6_int = ISC_TRUE;			break;		case 'n':			break;		case 'w':			/*			 * The timer routines are coded such that			 * timeout==MAXINT doesn't enable the timer			 */			timeout = INT_MAX;			break;		case 'W':			timeout = atoi(isc_commandline_argument);			if (timeout < 1)				timeout = 1;			break;		case 'R':			tries = atoi(isc_commandline_argument);			if (tries < 1)				tries = 1;			break;		case 'T':			lookup->tcp_mode = ISC_TRUE;			break;		case 'C':			debug("showing all SOAs");			lookup->rdtype = dns_rdatatype_ns;			lookup->rdtypeset = ISC_TRUE;			lookup->rdclass = dns_rdataclass_in;			lookup->rdclassset = ISC_TRUE;			lookup->ns_search_only = ISC_TRUE;			lookup->trace_root = ISC_TRUE;			lookup->identify_previous_line = ISC_TRUE;			break;		case 'N':			debug("setting NDOTS to %s",			      isc_commandline_argument);			ndots = atoi(isc_commandline_argument);			break;		case 'D':			debugging = ISC_TRUE;			break;		}	}	if (isc_commandline_index >= argc) {		show_usage();	}	strncpy(hostname, argv[isc_commandline_index], sizeof(hostname));	hostname[sizeof(hostname)-1]=0;	if (argc > isc_commandline_index + 1) {		srv = make_server(argv[isc_commandline_index+1]);		debug("server is %s", srv->servername);		ISC_LIST_APPEND(server_list, srv, link);		listed_server = ISC_TRUE;	}	lookup->pending = ISC_FALSE;	if (get_reverse(store, hostname, lookup->ip6_int, ISC_TRUE)			     == ISC_R_SUCCESS)	{		strncpy(lookup->textname, store, sizeof(lookup->textname));		lookup->textname[sizeof(lookup->textname)-1] = 0;		lookup->rdtype = dns_rdatatype_ptr;		lookup->rdtypeset = ISC_TRUE;	} else {		strncpy(lookup->textname, hostname, sizeof(lookup->textname));		lookup->textname[sizeof(lookup->textname)-1]=0;	}	lookup->new_search = ISC_TRUE;	ISC_LIST_APPEND(lookup_list, lookup, link);	usesearch = ISC_TRUE;}intmain(int argc, char **argv) {	isc_result_t result;	ISC_LIST_INIT(lookup_list);	ISC_LIST_INIT(server_list);	ISC_LIST_INIT(search_list);		fatalexit = 1;	debug("main()");	progname = argv[0];	result = isc_app_start();	check_result(result, "isc_app_start");	setup_libs();	parse_args(ISC_FALSE, argc, argv);	setup_system();	result = isc_app_onrun(mctx, global_task, onrun_callback, NULL);	check_result(result, "isc_app_onrun");	isc_app_run();	cancel_all();	destroy_libs();	isc_app_finish();	return (0);}

⌨️ 快捷键说明

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