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

📄 print-ppp.c

📁 Windump3.6.2源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/* * 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. * * Extensively modified by Motonori Shindo (mshindo@mshindo.net) for more * complete PPP support. *//* * TODO: * o resolve XXX as much as possible * o MP support * o BAP support */#ifndef lintstatic const char rcsid[] =    "@(#) $Header: /tcpdump/master/tcpdump/print-ppp.c,v 1.58 2000/12/27 11:09:08 itojun Exp $ (LBL)";#endif#ifdef HAVE_CONFIG_H#include "config.h"#endif#ifndef WIN32
#include <sys/param.h>#include <sys/time.h>#else 
#include <winsock2.h>
#include "bittypes.h"
#include <time.h>
#include "ethertype.h"
#endif /* WIN32 */
#ifdef __bsdi__#include <net/slcompress.h>#include <net/if_ppp.h>#endif#ifndef WIN32
#include <netinet/in.h>#endif /* WIN32 */
#include <ctype.h>#include <netdb.h>#include <pcap.h>#include <stdio.h>#include "interface.h"#include "extract.h"#include "addrtoname.h"#include "ppp.h"#include "chdlc.h"#include "ethertype.h"/* * The following constatns are defined by IANA. Please refer to *    http://www.isi.edu/in-notes/iana/assignments/ppp-numbers * for the up-to-date information. *//* Control Protocols (LCP/IPCP/CCP etc.) Codes */#define CPCODES_VEXT		0	/* Vendor-Specific (RFC2153) */#define CPCODES_CONF_REQ	1	/* Configure-Request */#define CPCODES_CONF_ACK	2	/* Configure-Ack */#define CPCODES_CONF_NAK	3	/* Configure-Nak */#define CPCODES_CONF_REJ	4	/* Configure-Reject */#define CPCODES_TERM_REQ	5	/* Terminate-Request */#define CPCODES_TERM_ACK	6	/* Terminate-Ack */#define CPCODES_CODE_REJ	7	/* Code-Reject */#define CPCODES_PROT_REJ	8	/* Protocol-Reject (LCP only) */#define CPCODES_ECHO_REQ	9	/* Echo-Request (LCP only) */#define CPCODES_ECHO_RPL	10	/* Echo-Reply (LCP only) */#define CPCODES_DISC_REQ	11	/* Discard-Request (LCP only) */#define CPCODES_ID		12	/* Identification (LCP only) */#define CPCODES_TIME_REM	13	/* Time-Remaining (LCP only) */#define CPCODES_RESET_REQ	14	/* Reset-Request (CCP only) */#define CPCODES_RESET_REP	15	/* Reset-Reply (CCP only) */#define CPCODES_MIN	CPCODES_VEXT#define CPCODES_MAX	CPCODES_RESET_REPstatic const char *cpcodes[] = {	/*	 * Control Protocol code values (RFC1661)	 */	"Vend-Ext",	/* (0) RFC2153 */	"Conf-Req",	/* (1) */	"Conf-Ack",	/* (2) */	"Conf-Nak",	/* (3) */	"Conf-Rej",	/* (4) */	"Term-Req",	/* (5) */	"Term-Ack",	/* (6) */ 	"Code-Rej",	/* (7) */	"Prot-Rej",	/* (8) */	"Echo-Req",	/* (9) */	"Echo-Rep",	/* (10) */	"Disc-Req",	/* (11) */	"Ident",	/* (12) RFC1570 */	"Time-Rem",	/* (13) RFC1570 */	"Reset-Req",	/* (14) RFC1962 */	"Reset-Ack",	/* (15) RFC1962 */};/* LCP Config Options */#define LCPOPT_VEXT	0#define LCPOPT_MRU	1#define LCPOPT_ACCM	2#define LCPOPT_AP	3#define LCPOPT_QP	4#define LCPOPT_MN	5#define LCPOPT_DEP6	6#define LCPOPT_PFC	7#define LCPOPT_ACFC	8#define LCPOPT_FCSALT	9#define LCPOPT_SDP	10#define LCPOPT_NUMMODE	11#define LCPOPT_DEP12	12#define LCPOPT_CBACK	13#define LCPOPT_DEP14	14#define LCPOPT_DEP15	15#define LCPOPT_DEP16	16#define LCPOPT_MLMRRU	17#define LCPOPT_MLSSNHF	18#define LCPOPT_MLED	19#define LCPOPT_PROP	20#define LCPOPT_DCEID	21#define LCPOPT_MPP	22#define LCPOPT_LD	23#define LCPOPT_LCPAOPT	24#define LCPOPT_COBS	25#define LCPOPT_PE	26#define LCPOPT_MLHF	27#define LCPOPT_I18N	28#define LCPOPT_SDLOS	29#define LCPOPT_PPPMUX	30#define LCPOPT_MIN LCPOPT_VEXT#define LCPOPT_MAX LCPOPT_PPPMUXstatic const char *lcpconfopts[] = {	"Vend-Ext",		/* (0) */	"MRU",			/* (1) */	"ACCM",			/* (2) */	"Auth-Prot",		/* (3) */	"Qual-Prot",		/* (4) */	"Magic-Num",		/* (5) */	"deprecated(6)",	/* used to be a Quality Protocol */	"PFC",			/* (7) */	"ACFC",			/* (8) */	"FCS-Alt",		/* (9) */	"SDP",			/* (10) */	"Num-Mode",		/* (11) */	"deprecated(12)",	/* used to be a Multi-Link-Procedure*/	"Call-Back",		/* (13) */	"deprecated(14)",	/* used to be a Connect-Time */	"deprecated(15)",	/* used to be a Compund-Frames */	"deprecated(16)",	/* used to be a Nominal-Data-Encap */	"MRRU",			/* (17) */	"SSNHF",		/* (18) */	"End-Disc",		/* (19) */	"Proprietary",		/* (20) */	"DCE-Id",		/* (21) */	"MP+",			/* (22) */	"Link-Disc",		/* (23) */	"LCP-Auth-Opt",		/* (24) */	"COBS",			/* (25) */	"Prefix-elision",	/* (26) */	"Multilink-header-Form",/* (27) */	"I18N",			/* (28) */	"SDL-over-SONET/SDH",	/* (29) */	"PPP-Muxing",		/* (30) */};/* IPV6CP - to be supported *//* ECP - to be supported *//* CCP Config Options */#define CCPOPT_OUI	0	/* RFC1962 */#define CCPOPT_PRED1	1	/* RFC1962 */#define CCPOPT_PRED2	2	/* RFC1962 */#define CCPOPT_PJUMP	3	/* RFC1962 *//* 4-15 unassigned */#define CCPOPT_HPPPC	16	/* RFC1962 */#define CCPOPT_STACLZS	17	/* RFC1974 */#define CCPOPT_MPPC	18	/* RFC2118 */#define CCPOPT_GFZA	19	/* RFC1962 */#define CCPOPT_V42BIS	20	/* RFC1962 */#define CCPOPT_BSDCOMP	21	/* RFC1977 *//* 22 unassigned */#define CCPOPT_LZSDCP	23	/* RFC1967 */#define CCPOPT_MVRCA	24	/* RFC1975 */#define CCPOPT_DEC	25	/* RFC1976 */#define CCPOPT_DEFLATE	26	/* RFC1979 *//* 27-254 unassigned */#define CCPOPT_RESV	255	/* RFC1962 */#define CCPOPT_MIN CCPOPT_OUI#define CCPOPT_MAX CCPOPT_DEFLATE    /* XXX: should be CCPOPT_RESV but... */static const char *ccpconfopts[] = {	"OUI",			/* (0) */	"Pred-1",		/* (1) */	"Pred-2",		/* (2) */	"Puddle",		/* (3) */	"unassigned(4)",	/* (4) */	"unassigned(5)",	/* (5) */	"unassigned(6)",	/* (6) */	"unassigned(7)",	/* (7) */	"unassigned(8)",	/* (8) */	"unassigned(9)",	/* (9) */	"unassigned(10)",	/* (10) */	"unassigned(11)",	/* (11) */	"unassigned(12)",	/* (12) */	"unassigned(13)",	/* (13) */	"unassigned(14)",	/* (14) */	"unassigned(15)",	/* (15) */	"HP-PPC",		/* (16) */	"Stac-LZS",		/* (17) */	"MPPC",			/* (18) */	"Gand-FZA",		/* (19) */	"V.42bis",		/* (20) */	"BSD-Comp",		/* (21) */	"unassigned(22)",	/* (22) */	"LZS-DCP",		/* (23) */	"MVRCA",		/* (24) */	"DEC",			/* (25) */	"Deflate",		/* (26) */};/* BACP Config Options */#define BACPOPT_FPEER	1	/* RFC2125 *//* SDCP - to be supported *//* IPCP Config Options */#define IPCPOPT_2ADDR	1	/* RFC1172, RFC1332 (deprecated) */#define IPCPOPT_IPCOMP	2	/* RFC1332 */#define IPCPOPT_ADDR	3	/* RFC1332 */#define IPCPOPT_MOBILE4	4	/* RFC2290 */#define IPCPOPT_PRIDNS	129	/* RFC1877 */#define IPCPOPT_PRINBNS	130	/* RFC1877 */#define IPCPOPT_SECDNS	131	/* RFC1877 */#define IPCPOPT_SECNBNS	132	/* RFC1877 *//* ATCP - to be supported *//* OSINLCP - to be supported *//* BVCP - to be supported *//* BCP - to be supported *//* IPXCP - to be supported *//* Auth Algorithms *//* 0-4 Reserved (RFC1994) */#define AUTHALG_CHAPMD5	5	/* RFC1994 */#define AUTHALG_MSCHAP1	128	/* RFC2433 */#define AUTHALG_MSCHAP2	129	/* RFC2795 *//* FCS Alternatives - to be supported *//* Multilink Endpoint Discriminator (RFC1717) */#define MEDCLASS_NULL	0	/* Null Class */#define MEDCLASS_LOCAL	1	/* Locally Assigned */#define MEDCLASS_IPV4	2	/* Internet Protocol (IPv4) */#define MEDCLASS_MAC	3	/* IEEE 802.1 global MAC address */#define MEDCLASS_MNB	4	/* PPP Magic Number Block */#define MEDCLASS_PSNDN	5	/* Public Switched Network Director Number *//* PPP LCP Callback */#define CALLBACK_AUTH	0	/* Location determined by user auth */#define CALLBACK_DSTR	1	/* Dialing string */#define CALLBACK_LID	2	/* Location identifier */#define CALLBACK_E164	3	/* E.164 number */#define CALLBACK_X500	4	/* X.500 distinguished name */#define CALLBACK_CBCP	6	/* Location is determined during CBCP nego *//* CHAP */#define CHAP_CHAL	1#define CHAP_RESP	2#define CHAP_SUCC	3#define CHAP_FAIL	4#define CHAP_CODEMIN CHAP_CHAL#define CHAP_CODEMAX CHAP_FAILstatic const char *chapcode[] = {	"Chal",		/* (1) */	"Resp",		/* (2) */	"Succ",		/* (3) */	"Fail",		/* (4) */};/* PAP */#define PAP_AREQ	1#define PAP_AACK	2#define PAP_ANAK	3#define PAP_CODEMIN	PAP_AREQ#define PAP_CODEMAX	PAP_ANAKstatic const char *papcode[] = {	"Auth-Req",	/* (1) */	"Auth-Ack",	/* (2) */	"Auth-Nak",	/* (3) */};/* BAP */#define BAP_CALLREQ	1#define BAP_CALLRES	2#define BAP_CBREQ	3#define BAP_CBRES	4#define BAP_LDQREQ	5#define BAP_LDQRES	6#define BAP_CSIND	7#define BAP_CSRES	8static const char *ppp_protoname (u_int proto);static void handle_ctrl_proto (u_int proto,const u_char *p, int length);static void handle_chap (const u_char *p, int length);static void handle_pap (const u_char *p, int length);static void handle_bap (const u_char *p, int length);static int print_lcp_config_options (const u_char *p, int);static int print_ipcp_config_options (const u_char *p, int);static int print_ccp_config_options (const u_char *p, int);static int print_bacp_config_options (const u_char *p, int);static void handle_ppp (u_int proto, const u_char *p, int length);static const char *ppp_protoname(u_int proto){	static char buf[20];	switch (proto) {	case PPP_IP:	return "IP";	case PPP_IPV6:	return "IPv6";#ifdef PPP_XNS	case PPP_XNS:	return "XNS";#endif	case PPP_IPX:	return "IPX";	case PPP_VJC:	return "VJC";	case PPP_VJNC:	return "VJNC";#ifdef PPP_COMP	case PPP_COMP:	return "COMP";#endif	case PPP_IPCP:	return "IPCP";	case PPP_IPV6CP: return "IPv6CP";	case PPP_IPXCP:	return "IPXCP";	case PPP_CCP:	return "CCP";	case PPP_LCP:	return "LCP";	case PPP_PAP:	return "PAP";#ifdef PPP_LQR	case PPP_LQR:	return "LQR";#endif	case PPP_CHAP:	return "CHAP";	case PPP_BACP:	return "BACP";	case PPP_BAP:	return "BAP";	default:		snprintf(buf, sizeof(buf), "unknown-0x%04x", proto);		return buf;	}}/* generic Control Protocol (e.g. LCP, IPCP, CCP, etc.) handler */static voidhandle_ctrl_proto(u_int proto, const u_char *p, int length){	u_int code, len;	int (*pfunc)(const u_char *, int);	int x, j;	if (length < 1) {		printf("[|%s]", ppp_protoname(proto));		return;	} else if (length < 4) {		printf("[|%s 0x%02x]", ppp_protoname(proto), *p);		return;	}	code = *p;	if ((code >= CPCODES_MIN) && (code <= CPCODES_MAX))		printf("%s", cpcodes[code]);	else {		printf("0x%02x", code);		return;	}	p++;	printf("(%u)", *p);		/* ID */	p++;	len = EXTRACT_16BITS(p);	p += 2;	if (length <= 4)		return;		/* there may be a NULL confreq etc. */	switch (code) {	case CPCODES_VEXT:		if (length < 11)			break;		printf(", Magic-Num=%08x", EXTRACT_32BITS(p));		p += 4;		printf(" OUI=%02x%02x%02x", p[0], p[1], p[2]);		/* XXX: need to decode Kind and Value(s)? */		break;	case CPCODES_CONF_REQ:	case CPCODES_CONF_ACK:	case CPCODES_CONF_NAK:	case CPCODES_CONF_REJ:		x = len - 4;	/* Code(1), Identifier(1) and Length(2) */		do {			switch (proto) {			case PPP_LCP:				pfunc = print_lcp_config_options;				break;			case PPP_IPCP:				pfunc = print_ipcp_config_options;				break;			case PPP_CCP:				pfunc = print_ccp_config_options;				break;			case PPP_BACP:				pfunc = print_bacp_config_options;				break;			default:				/*				 * This should never happen, but we set				 * "pfunc" to squelch uninitialized				 * variable warnings from compilers.				 */				pfunc = NULL;				break;			}			if ((j = (*pfunc)(p, len)) == 0)				break;			x -= j;			p += j;		} while (x > 0);

⌨️ 快捷键说明

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