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

📄 print-ppp.c

📁 Windump3.6.2源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
		break;	case CPCODES_TERM_REQ:	case CPCODES_TERM_ACK:		/* XXX: need to decode Data? */		break;	case CPCODES_CODE_REJ:		/* XXX: need to decode Rejected-Packet? */		break;	case CPCODES_PROT_REJ:		if (length < 6)			break;		printf(", Rejected-Protocol=%04x", EXTRACT_16BITS(p));		/* XXX: need to decode Rejected-Information? */		break;	case CPCODES_ECHO_REQ:	case CPCODES_ECHO_RPL:	case CPCODES_DISC_REQ:	case CPCODES_ID:		if (length < 8)			break;		printf(", Magic-Num=%08x", EXTRACT_32BITS(p));		/* XXX: need to decode Data? */		break;	case CPCODES_TIME_REM:		if (length < 12)			break;		printf(", Magic-Num=%08x", EXTRACT_32BITS(p));		printf(" Seconds-Remaining=%u", EXTRACT_32BITS(p + 4));		/* XXX: need to decode Message? */		break;	default:		printf(", unknown-Codes-0x%02x", code);		break;	}}/* LCP config options */static intprint_lcp_config_options(const u_char *p, int length){	int len, opt;	if (length < 2)		return 0;	len = p[1];	opt = p[0];	if (length < len)		return 0;	if ((opt >= LCPOPT_MIN) && (opt <= LCPOPT_MAX))		printf(", %s", lcpconfopts[opt]);	else {		printf(", unknwhown-%d", opt);		return len;	}	switch (opt) {	case LCPOPT_VEXT:		if (len >= 6) {			printf(" OUI=%02x%02x%02x", p[2], p[3], p[4]);#if 0			printf(" kind=%02x", p[5]);			printf(" val=")			for (i = 0; i < len - 6; i++) {				printf("%02x", p[6 + i]);			}#endif		}		break;	case LCPOPT_MRU:		if (len == 4)			printf("=%u", EXTRACT_16BITS(p + 2));		break;	case LCPOPT_ACCM:		if (len == 6)			printf("=%08x", EXTRACT_32BITS(p + 2));		break;	case LCPOPT_AP:		if (len >= 4) {			if (p[2] == 0xc0 && p[3] == 0x23)				printf(" PAP");			else if (p[2] == 0xc2 && p[3] == 0x23) {				printf(" CHAP/");				switch (p[4]) {				default:					printf("unknown-algorithm-%u", p[4]);					break;				case AUTHALG_CHAPMD5:					printf("MD5");					break;				case AUTHALG_MSCHAP1:					printf("MSCHAPv1");					break;				case AUTHALG_MSCHAP2:					printf("MSCHAPv2");					break;				}			}			else if (p[2] == 0xc2 && p[3] == 0x27)				printf(" EAP");			else if (p[2] == 0xc0 && p[3] == 0x27)				printf(" SPAP");			else if (p[2] == 0xc1 && p[3] == 0x23)				printf(" Old-SPAP");			else				printf("unknown");		}		break;	case LCPOPT_QP:		if (len >= 4) {			if (p[2] == 0xc0 && p[3] == 0x25)				printf(" LQR");			else				printf(" unknown");		}		break;	case LCPOPT_MN:		if (len == 6)			printf("=%08x", EXTRACT_32BITS(p + 2));		break;	case LCPOPT_PFC:		break;	case LCPOPT_ACFC:		break;	case LCPOPT_LD:		if (len == 4)			printf("=%04x", EXTRACT_16BITS(p + 2));		break;	case LCPOPT_CBACK:		if (len < 3)			break;		switch (p[2]) {		/* Operation */		case CALLBACK_AUTH:			printf(" UserAuth");			break;		case CALLBACK_DSTR:			printf(" DialString");			break;		case CALLBACK_LID:			printf(" LocalID");			break;		case CALLBACK_E164:			printf(" E.164");			break;		case CALLBACK_X500:			printf(" X.500");			break;		case CALLBACK_CBCP:			printf(" CBCP");			break;		default:			printf(" unknown-operation=%u", p[2]);			break;		}		break;	case LCPOPT_MLMRRU:		if (len == 4)			printf("=%u", EXTRACT_16BITS(p + 2));		break;	case LCPOPT_MLED:		if (len < 3)			break;		switch (p[2]) {		/* class */		case MEDCLASS_NULL:			printf(" Null");			break;		case MEDCLASS_LOCAL:			printf(" Local"); /* XXX */			break;		case MEDCLASS_IPV4:			if (len != 7)				break;			printf(" IPv4=%s", ipaddr_string(p + 3));			break;		case MEDCLASS_MAC:			if (len != 9)				break;			printf(" MAC=%02x:%02x:%02x:%02x:%02x:%02x",			       p[3], p[4], p[5], p[6], p[7], p[8]);			break;		case MEDCLASS_MNB:			printf(" Magic-Num-Block"); /* XXX */			break;		case MEDCLASS_PSNDN:			printf(" PSNDN"); /* XXX */			break;		}		break;/* XXX: to be supported */#if 0	case LCPOPT_DEP6:	case LCPOPT_FCSALT:	case LCPOPT_SDP:	case LCPOPT_NUMMODE:	case LCPOPT_DEP12:	case LCPOPT_DEP14:	case LCPOPT_DEP15:	case LCPOPT_DEP16:	case LCPOPT_MLSSNHF:	case LCPOPT_PROP:	case LCPOPT_DCEID:	case LCPOPT_MPP:	case LCPOPT_LCPAOPT:	case LCPOPT_COBS:	case LCPOPT_PE:	case LCPOPT_MLHF:	case LCPOPT_I18N:	case LCPOPT_SDLOS:	case LCPOPT_PPPMUX:		break;#endif	}	return len;}/* CHAP */static voidhandle_chap(const u_char *p, int length){	u_int code, len;	int val_size, name_size, msg_size;	const u_char *p0;	int i;	p0 = p;	if (length < 1) {		printf("[|chap]");		return;	} else if (length < 4) {		printf("[|chap 0x%02x]", *p);		return;	}	code = *p;	if ((code >= CHAP_CODEMIN) && (code <= CHAP_CODEMAX))		printf("%s", chapcode[code - 1]);	else {		printf("0x%02x", code);		return;	}	p++;	printf("(%u)", *p);		/* ID */	p++;	len = EXTRACT_16BITS(p);	p += 2;	/*	 * Note that this is a generic CHAP decoding routine. Since we	 * don't know which flavor of CHAP (i.e. CHAP-MD5, MS-CHAPv1,	 * MS-CHAPv2) is used at this point, we can't decode packet	 * specifically to each algorithms. Instead, we simply decode	 * the GCD (Gratest Common Denominator) for all algorithms.	 */	switch (code) {	case CHAP_CHAL:	case CHAP_RESP:		if (length - (p - p0) < 1)			return;		val_size = *p;		/* value size */		p++;		if (length - (p - p0) < val_size)			return;		printf(", Value=");		for (i = 0; i < val_size; i++)			printf("%02x", *p++);		name_size = len - (p - p0);		printf(", Name=");		for (i = 0; i < name_size; i++)			safeputchar(*p++);		break;	case CHAP_SUCC:	case CHAP_FAIL:		msg_size = len - (p - p0);		printf(", Msg=");		for (i = 0; i< msg_size; i++)			safeputchar(*p++);		break;	}}/* PAP (see RFC 1334) */static voidhandle_pap(const u_char *p, int length){	u_int code, len;	int peerid_len, passwd_len, msg_len;	const u_char *p0;	int i;	p0 = p;	if (length < 1) {		printf("[|pap]");		return;	} else if (length < 4) {		printf("[|pap 0x%02x]", *p);		return;	}	code = *p;	if ((code >= PAP_CODEMIN) && (code <= PAP_CODEMAX))		printf("%s", papcode[code - 1]);	else {		printf("0x%02x", code);		return;	}	p++;	printf("(%u)", *p);		/* ID */	p++;	len = EXTRACT_16BITS(p);	p += 2;	switch (code) {	case PAP_AREQ:		if (length - (p - p0) < 1)			return;		peerid_len = *p;	/* Peer-ID Length */		p++;		if (length - (p - p0) < peerid_len)			return;		printf(", Peer=");		for (i = 0; i < peerid_len; i++)			safeputchar(*p++);		if (length - (p - p0) < 1)			return;		passwd_len = *p;	/* Password Length */		p++;		if (length - (p - p0) < passwd_len)			return;		printf(", Name=");		for (i = 0; i < passwd_len; i++)			safeputchar(*p++);		break;	case PAP_AACK:	case PAP_ANAK:		if (length - (p - p0) < 1)			return;		msg_len = *p;		/* Msg-Length */		p++;		if (length - (p - p0) < msg_len)			return;		printf(", Msg=");		for (i = 0; i< msg_len; i++)			safeputchar(*p++);		break;	}	return;}/* BAP */static voidhandle_bap(const u_char *p, int length){	/* XXX: to be supported!! */}/* IPCP config options */static intprint_ipcp_config_options(const u_char *p, int length){	int len, opt;	if (length < 2)		return 0;	len = p[1];	opt = p[0];	if (length < len)		return 0;	switch (opt) {	case IPCPOPT_2ADDR:		/* deprecated */		if (len != 10)			goto invlen;		printf(", IP-Addrs src=%s dst=%s",		       ipaddr_string(p + 2),		       ipaddr_string(p + 6));		break;	case IPCPOPT_IPCOMP:		if (len < 4)			goto invlen;		printf(", IP-Comp");		if (EXTRACT_16BITS(p + 2) == PPP_VJC) {			printf(" VJ-Comp");			/* XXX: VJ-Comp parameters should be decoded */		} else			printf(" unknown-comp-proto=%04x", EXTRACT_16BITS(p + 2));		break;	case IPCPOPT_ADDR:		if (len != 6)			goto invlen;		printf(", IP-Addr=%s", ipaddr_string(p + 2));		break;	case IPCPOPT_MOBILE4:		if (len != 6)			goto invlen;		printf(", Home-Addr=%s", ipaddr_string(p + 2));		break;	case IPCPOPT_PRIDNS:		if (len != 6)			goto invlen;		printf(", Pri-DNS=%s", ipaddr_string(p + 2));		break;	case IPCPOPT_PRINBNS:		if (len != 6)			goto invlen;		printf(", Pri-NBNS=%s", ipaddr_string(p + 2));		break;	case IPCPOPT_SECDNS:		if (len != 6)			goto invlen;		printf(", Sec-DNS=%s", ipaddr_string(p + 2));		break;	case IPCPOPT_SECNBNS:		if (len != 6)			goto invlen;		printf(", Sec-NBNS=%s", ipaddr_string(p + 2));		break;	default:		printf(", unknown-%d", opt);		break;	}	return len;invlen:	printf(", invalid-length-%d", opt);	return 0;}/* CCP config options */static intprint_ccp_config_options(const u_char *p, int length){	int len, opt;	if (length < 2)		return 0;	len = p[1];	opt = p[0];	if (length < len)		return 0;	if ((opt >= CCPOPT_MIN) && (opt <= CCPOPT_MAX))		printf(", %s", ccpconfopts[opt]);#if 0	/* XXX */	switch (opt) {	case CCPOPT_OUI:	case CCPOPT_PRED1:	case CCPOPT_PRED2:	case CCPOPT_PJUMP:	case CCPOPT_HPPPC:	case CCPOPT_STACLZS:	case CCPOPT_MPPC:	case CCPOPT_GFZA:	case CCPOPT_V42BIS:	case CCPOPT_BSDCOMP:	case CCPOPT_LZSDCP:	case CCPOPT_MVRCA:	case CCPOPT_DEC:

⌨️ 快捷键说明

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