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

📄 res_debug.c

📁 一个C源代码分析器
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * ++Copyright++ 1985, 1990, 1993 * - * Copyright (c) 1985, 1990, 1993 *    The Regents of the University of California.  All rights reserved. *  * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: * 	This product includes software developed by the University of * 	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. *  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * Portions Copyright (c) 1993 by Digital Equipment Corporation. *  * 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, and that * the name of Digital Equipment Corporation not be used in advertising or * publicity pertaining to distribution of the document or software without * specific, written prior permission. *  * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT * CORPORATION 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. * - * --Copyright-- */#if defined(LIBC_SCCS) && !defined(lint)static char sccsid[] = "@(#)res_debug.c	8.1 (Berkeley) 6/4/93";static char rcsid[] = "$Id: res_debug.c,v 1.2 1994/07/28 21:56:22 roland Exp $";#endif /* LIBC_SCCS and not lint */#include <sys/param.h>#include <netinet/in.h>#include <arpa/inet.h>#include <arpa/nameser.h>#include <stdio.h>#include <resolv.h>#if defined(BSD) && (BSD >= 199103)# include <string.h>#else# include "../conf/portability.h"#endif#if defined(USE_OPTIONS_H)# include "../conf/options.h"#endifconst char *_res_opcodes[] = {	"QUERY",	"IQUERY",	"CQUERYM",	"CQUERYU",	"4",	"5",	"6",	"7",	"8",	"UPDATEA",	"UPDATED",	"UPDATEDA",	"UPDATEM",	"UPDATEMA",	"ZONEINIT",	"ZONEREF",};const char *_res_resultcodes[] = {	"NOERROR",	"FORMERR",	"SERVFAIL",	"NXDOMAIN",	"NOTIMP",	"REFUSED",	"6",	"7",	"8",	"9",	"10",	"11",	"12",	"13",	"14",	"NOCHANGE",};static char retbuf[16];static const char *dewks(wks)	int wks;{	switch (wks) {	case 5: return "rje";	case 7: return "echo";	case 9: return "discard";	case 11: return "systat";	case 13: return "daytime";	case 15: return "netstat";	case 17: return "qotd";	case 19: return "chargen";	case 20: return "ftp-data";	case 21: return "ftp";	case 23: return "telnet";	case 25: return "smtp";	case 37: return "time";	case 39: return "rlp";	case 42: return "name";	case 43: return "whois";	case 53: return "domain";	case 57: return "apts";	case 59: return "apfs";	case 67: return "bootps";	case 68: return "bootpc";	case 69: return "tftp";	case 77: return "rje";	case 79: return "finger";	case 87: return "link";	case 95: return "supdup";	case 100: return "newacct";	case 101: return "hostnames";	case 102: return "iso-tsap";	case 103: return "x400";	case 104: return "x400-snd";	case 105: return "csnet-ns";	case 109: return "pop-2";	case 111: return "sunrpc";	case 113: return "auth";	case 115: return "sftp";	case 117: return "uucp-path";	case 119: return "nntp";	case 121: return "erpc";	case 123: return "ntp";	case 133: return "statsrv";	case 136: return "profile";	case 144: return "NeWS";	case 161: return "snmp";	case 162: return "snmp-trap";	case 170: return "print-srv";	default: (void) sprintf(retbuf, "%d", wks); return (retbuf);	}}static const char *deproto(protonum)	int protonum;{	switch (protonum) {	case 1: return "icmp";	case 2: return "igmp";	case 3: return "ggp";	case 5: return "st";	case 6: return "tcp";	case 7: return "ucl";	case 8: return "egp";	case 9: return "igp";	case 11: return "nvp-II";	case 12: return "pup";	case 16: return "chaos";	case 17: return "udp";	default: (void) sprintf(retbuf, "%d", protonum); return (retbuf);	}}static const u_char *do_rrset(msg, cp, cnt, pflag, file, hs)	int cnt, pflag;	const u_char *cp, *msg;	const char *hs;	FILE *file;{	int n;	int sflag;	/*	 * Print answer records.	 */	sflag = (_res.pfcode & pflag);	if (n = ntohs(cnt)) {		if ((!_res.pfcode) ||		    ((sflag) && (_res.pfcode & RES_PRF_HEAD1)))			fprintf(file, hs);		while (--n >= 0) {			cp = p_rr(cp, msg, file);			if ((cp - msg) > PACKETSZ)				return (NULL);		}		if ((!_res.pfcode) ||		    ((sflag) && (_res.pfcode & RES_PRF_HEAD1)))			putc('\n', file);	}	return (cp);}void__p_query(msg)	const u_char *msg;{	__fp_query(msg, stdout);}#ifdef ultrix/* ultrix 4.0's packaging has some icky packaging.  alias for it here. * there is more junk of this kind over in res_comp.c. */voidp_query(msg)	const u_char *msg;{	__p_query(msg);}#endif/* * Print the current options. * This is intended to be primarily a debugging routine. */void__fp_resstat(statp, file)	struct __res_state *statp;	FILE *file;{	register u_long mask;	fprintf(file, ";; res options:");	if (!statp)		statp = &_res;	for (mask = 1;  mask != 0;  mask <<= 1)		if (statp->options & mask)			fprintf(file, " %s", p_option(mask));	putc('\n', file);}/* * Print the contents of a query. * This is intended to be primarily a debugging routine. */void__fp_nquery(msg, len, file)	const u_char *msg;	int len;	FILE *file;{	register const u_char *cp, *endMark;	register const HEADER *hp;	register int n;#define TruncTest(x) if (x >= endMark) goto trunc#define	ErrorTest(x) if (x == NULL) goto error	/*	 * Print header fields.	 */	hp = (HEADER *)msg;	cp = msg + HFIXEDSZ;	endMark = cp + len;	if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEADX) || hp->rcode) {		fprintf(file, ";; ->>HEADER<<- opcode: %s, status: %s, id: %d",			_res_opcodes[hp->opcode],			_res_resultcodes[hp->rcode],			ntohs(hp->id));		putc('\n', file);	}	putc(';', file);	if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEAD2)) {		fprintf(file,"; flags:");		if (hp->qr)			fprintf(file, " qr");		if (hp->aa)			fprintf(file, " aa");		if (hp->tc)			fprintf(file, " tc");		if (hp->rd)			fprintf(file, " rd");		if (hp->ra)			fprintf(file, " ra");		if (hp->pr)			fprintf(file, " pr");	}	if ((!_res.pfcode) || (_res.pfcode & RES_PRF_HEAD1)) {		fprintf(file, "; Ques: %d", ntohs(hp->qdcount));		fprintf(file, ", Ans: %d", ntohs(hp->ancount));		fprintf(file, ", Auth: %d", ntohs(hp->nscount));		fprintf(file, ", Addit: %d", ntohs(hp->arcount));	}	if ((!_res.pfcode) || (_res.pfcode & 		(RES_PRF_HEADX | RES_PRF_HEAD2 | RES_PRF_HEAD1))) {		putc('\n',file);	}	/*	 * Print question records.	 */	if (n = ntohs(hp->qdcount)) {		if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES))			fprintf(file,";; QUESTIONS:\n");		while (--n >= 0) {			fprintf(file,";;\t");			TruncTest(cp);			cp = p_cdname(cp, msg, file);			ErrorTest(cp);			TruncTest(cp);			if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES))				fprintf(file, ", type = %s",					__p_type(_getshort((u_char*)cp)));			cp += INT16SZ;			TruncTest(cp);			if ((!_res.pfcode) || (_res.pfcode & RES_PRF_QUES))				fprintf(file, ", class = %s\n",					__p_class(_getshort((u_char*)cp)));			cp += INT16SZ;			putc('\n', file);		}	}	/*	 * Print authoritative answer records	 */	TruncTest(cp);	cp = do_rrset(msg, cp, hp->ancount, RES_PRF_ANS, file,		      ";; ANSWERS:\n");	ErrorTest(cp);	/*	 * print name server records	 */	TruncTest(cp);	cp = do_rrset(msg, cp, hp->nscount, RES_PRF_AUTH, file,		      ";; AUTHORITY RECORDS:\n");	ErrorTest(cp);	TruncTest(cp);	/*	 * print additional records	 */	cp = do_rrset(msg, cp, hp->arcount, RES_PRF_ADD, file,		      ";; ADDITIONAL RECORDS:\n");	ErrorTest(cp);	return; trunc:	fprintf(file, "\n;; ...truncated\n");	return; error:	fprintf(file, "\n;; ...malformed\n");}void__fp_query(msg, file)	const u_char *msg;	FILE *file;{	fp_nquery(msg, PACKETSZ, file);}const u_char *__p_cdnname(cp, msg, len, file)	const u_char *cp, *msg;	int len;	FILE *file;{	char name[MAXDNAME];	int n;

⌨️ 快捷键说明

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