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