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

📄 print-tftp.c

📁 网卡驱动相关实例 这是和网卡NT KMD驱动程序有关的一些资料和例子。主要是以下三方面内容: 3.1 article 一些有用的文档 3.2 Canberra 网络诊听工具Ethern
💻 C
字号:
/* * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996, 1997 *	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: (1) source code distributions * retain the above copyright notice and this paragraph in its entirety, (2) * distributions including binary code include the above copyright notice and * this paragraph in its entirety in the documentation or other materials * provided with the distribution, and (3) all advertising materials mentioning * features or use of this software display the following acknowledgement: * ``This product includes software developed by the University of California, * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * * Format and print trivial file transfer protocol packets. */#ifndef lintstatic const char rcsid[] =    "@(#) $Header: print-tftp.c,v 1.30 97/06/13 12:57:12 leres Exp $ (LBL)";#endif#ifndef WIN32
#include <sys/param.h>#include <sys/time.h>#include <netinet/in.h>#else
#include <winsock.h>
#endif
#ifdef SEGSIZE#undef SEGSIZE					/* SINIX sucks */#endif#include <arpa/tftp.h>#include <ctype.h>#include <stdio.h>
#include <string.h>#include "interface.h"#include "addrtoname.h"/* op code to string mapping */static struct tok op2str[] = {	{ RRQ,		"RRQ" },	/* read request */	{ WRQ,		"WRQ" },	/* write request */	{ DATA,		"DATA" },	/* data packet */	{ ACK,		"ACK" },	/* acknowledgement */	{ ERROR,	"ERROR" },	/* error code */	{ 0,		NULL }};/* error code to string mapping */static struct tok err2str[] = {	{ EUNDEF,	"EUNDEF" },	/* not defined */	{ ENOTFOUND,	"ENOTFOUND" },	/* file not found */	{ EACCESS,	"EACCESS" },	/* access violation */	{ ENOSPACE,	"ENOSPACE" },	/* disk full or allocation exceeded */	{ EBADOP,	"EBADOP" },	/* illegal TFTP operation */	{ EBADID,	"EBADID" },	/* unknown transfer ID */	{ EEXISTS,	"EEXISTS" },	/* file already exists */	{ ENOUSER,	"ENOUSER" },	/* no such user */	{ 0,		NULL }};/* * Print trivial file transfer program requests */voidtftp_print(register const u_char *bp, u_int length){	register const struct tftphdr *tp;	register const char *cp;	register const u_char *p;	register int opcode, i;	static char tstr[] = " [|tftp]";	tp = (const struct tftphdr *)bp;	/* Print length */	printf(" %d", length);	/* Print tftp request type */	TCHECK(tp->th_opcode);	opcode = ntohs(tp->th_opcode);	cp = tok2str(op2str, "tftp-#%d", opcode);	printf(" %s", cp);	/* Bail if bogus opcode */	if (*cp == 't')		return;	switch (opcode) {	case RRQ:	case WRQ:		/*		 * XXX Not all arpa/tftp.h's specify th_stuff as any		 * array; use address of th_block instead		 */#ifdef notdef		p = (u_char *)tp->th_stuff;#else		p = (u_char *)&tp->th_block;#endif		fputs(" \"", stdout);		i = fn_print(p, snapend);		putchar('"');		if (i)			goto trunc;		break;	case ACK:	case DATA:		TCHECK(tp->th_block);		printf(" block %d", ntohs(tp->th_block));		break;	case ERROR:		/* Print error code string */		TCHECK(tp->th_code);		printf(" %s ", tok2str(err2str, "tftp-err-#%d \"",				       ntohs(tp->th_code)));		/* Print error message string */		i = fn_print((const u_char *)tp->th_data, snapend);		putchar('"');		if (i)			goto trunc;		break;	default:		/* We shouldn't get here */		printf("(unknown #%d)", opcode);		break;	}	return;trunc:	fputs(tstr, stdout);	return;}

⌨️ 快捷键说明

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