📄 host.c
字号:
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 + -