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

📄 print-juniper.c

📁 TCPDUMP的C语言源代码,是在数据链路层的应用
💻 C
📖 第 1 页 / 共 4 页
字号:
        if(juniper_parse_header(p, h, &l2info) == 0)            return l2info.header_len;        p+=l2info.header_len;        extracted_ethertype = EXTRACT_16BITS(p);        /* this DLT contains nothing but raw PPPoE frames,         * prepended with a type field*/        if (ether_encap_print(extracted_ethertype,                              p+ETHERTYPE_LEN,                              l2info.length-ETHERTYPE_LEN,                              l2info.caplen-ETHERTYPE_LEN,                              &extracted_ethertype) == 0)            /* ether_type not known, probably it wasn't one */            printf("unknown ethertype 0x%04x", extracted_ethertype);                return l2info.header_len;}#endif#ifdef DLT_JUNIPER_MLPPPu_intjuniper_mlppp_print(const struct pcap_pkthdr *h, register const u_char *p){        struct juniper_l2info_t l2info;        l2info.pictype = DLT_JUNIPER_MLPPP;        if(juniper_parse_header(p, h, &l2info) == 0)            return l2info.header_len;        /* suppress Bundle-ID if frame was captured on a child-link         * best indicator if the cookie looks like a proto */        if (eflag &&            EXTRACT_16BITS(&l2info.cookie) != PPP_OSI &&            EXTRACT_16BITS(&l2info.cookie) !=  (PPP_ADDRESS << 8 | PPP_CONTROL))            printf("Bundle-ID %u: ",l2info.bundle);        p+=l2info.header_len;        /* first try the LSQ protos */        switch(l2info.proto) {        case JUNIPER_LSQ_L3_PROTO_IPV4:            /* IP traffic going to the RE would not have a cookie             * -> this must be incoming IS-IS over PPP             */            if (l2info.cookie[4] == (JUNIPER_LSQ_COOKIE_RE|JUNIPER_LSQ_COOKIE_DIR))                ppp_print(p, l2info.length);            else                ip_print(gndo, p, l2info.length);            return l2info.header_len;#ifdef INET6        case JUNIPER_LSQ_L3_PROTO_IPV6:            ip6_print(p,l2info.length);            return l2info.header_len;#endif        case JUNIPER_LSQ_L3_PROTO_MPLS:            mpls_print(p,l2info.length);            return l2info.header_len;        case JUNIPER_LSQ_L3_PROTO_ISO:            isoclns_print(p,l2info.length,l2info.caplen);            return l2info.header_len;        default:            break;        }        /* zero length cookie ? */        switch (EXTRACT_16BITS(&l2info.cookie)) {        case PPP_OSI:            ppp_print(p-2,l2info.length+2);            break;        case (PPP_ADDRESS << 8 | PPP_CONTROL): /* fall through */        default:            ppp_print(p,l2info.length);            break;        }        return l2info.header_len;}#endif#ifdef DLT_JUNIPER_MFRu_intjuniper_mfr_print(const struct pcap_pkthdr *h, register const u_char *p){        struct juniper_l2info_t l2info;        l2info.pictype = DLT_JUNIPER_MFR;        if(juniper_parse_header(p, h, &l2info) == 0)            return l2info.header_len;                p+=l2info.header_len;        /* child-link ? */        if (l2info.cookie_len == 0) {            mfr_print(p,l2info.length);            return l2info.header_len;        }        /* first try the LSQ protos */        if (l2info.cookie_len == AS_PIC_COOKIE_LEN) {            switch(l2info.proto) {            case JUNIPER_LSQ_L3_PROTO_IPV4:                ip_print(gndo, p, l2info.length);                return l2info.header_len;#ifdef INET6            case JUNIPER_LSQ_L3_PROTO_IPV6:                ip6_print(p,l2info.length);                return l2info.header_len;#endif            case JUNIPER_LSQ_L3_PROTO_MPLS:                mpls_print(p,l2info.length);                return l2info.header_len;            case JUNIPER_LSQ_L3_PROTO_ISO:                isoclns_print(p,l2info.length,l2info.caplen);                return l2info.header_len;            default:                break;            }            return l2info.header_len;        }        /* suppress Bundle-ID if frame was captured on a child-link */        if (eflag && EXTRACT_32BITS(l2info.cookie) != 1) printf("Bundle-ID %u, ",l2info.bundle);        switch (l2info.proto) {        case (LLCSAP_ISONS<<8 | LLCSAP_ISONS):            isoclns_print(p+1, l2info.length-1, l2info.caplen-1);            break;        case (LLC_UI<<8 | NLPID_Q933):        case (LLC_UI<<8 | NLPID_IP):        case (LLC_UI<<8 | NLPID_IP6):            /* pass IP{4,6} to the OSI layer for proper link-layer printing */            isoclns_print(p-1, l2info.length+1, l2info.caplen+1);             break;        default:            printf("unknown protocol 0x%04x, length %u",l2info.proto, l2info.length);        }        return l2info.header_len;}#endif#ifdef DLT_JUNIPER_MLFRu_intjuniper_mlfr_print(const struct pcap_pkthdr *h, register const u_char *p){        struct juniper_l2info_t l2info;        l2info.pictype = DLT_JUNIPER_MLFR;        if(juniper_parse_header(p, h, &l2info) == 0)            return l2info.header_len;        p+=l2info.header_len;        /* suppress Bundle-ID if frame was captured on a child-link */        if (eflag && EXTRACT_32BITS(l2info.cookie) != 1) printf("Bundle-ID %u, ",l2info.bundle);        switch (l2info.proto) {        case (LLC_UI):        case (LLC_UI<<8):            isoclns_print(p, l2info.length, l2info.caplen);            break;        case (LLC_UI<<8 | NLPID_Q933):        case (LLC_UI<<8 | NLPID_IP):        case (LLC_UI<<8 | NLPID_IP6):            /* pass IP{4,6} to the OSI layer for proper link-layer printing */            isoclns_print(p-1, l2info.length+1, l2info.caplen+1);            break;        default:            printf("unknown protocol 0x%04x, length %u",l2info.proto, l2info.length);        }        return l2info.header_len;}#endif/* *     ATM1 PIC cookie format * *     +-----+-------------------------+-------------------------------+ *     |fmtid|     vc index            |  channel  ID                  | *     +-----+-------------------------+-------------------------------+ */#ifdef DLT_JUNIPER_ATM1u_intjuniper_atm1_print(const struct pcap_pkthdr *h, register const u_char *p){        u_int16_t extracted_ethertype;        struct juniper_l2info_t l2info;        l2info.pictype = DLT_JUNIPER_ATM1;        if(juniper_parse_header(p, h, &l2info) == 0)            return l2info.header_len;        p+=l2info.header_len;        if (l2info.cookie[0] == 0x80) { /* OAM cell ? */            oam_print(p,l2info.length,ATM_OAM_NOHEC);            return l2info.header_len;        }        if (EXTRACT_24BITS(p) == 0xfefe03 || /* NLPID encaps ? */            EXTRACT_24BITS(p) == 0xaaaa03) { /* SNAP encaps ? */            if (llc_print(p, l2info.length, l2info.caplen, NULL, NULL,                          &extracted_ethertype) != 0)                return l2info.header_len;        }        if (p[0] == 0x03) { /* Cisco style NLPID encaps ? */            isoclns_print(p + 1, l2info.length - 1, l2info.caplen - 1);            /* FIXME check if frame was recognized */            return l2info.header_len;        }        if(ip_heuristic_guess(p, l2info.length) != 0) /* last try - vcmux encaps ? */            return l2info.header_len;	return l2info.header_len;}#endif/* *     ATM2 PIC cookie format * *     +-------------------------------+---------+---+-----+-----------+ *     |     channel ID                |  reserv |AAL| CCRQ| gap cnt   | *     +-------------------------------+---------+---+-----+-----------+ */#ifdef DLT_JUNIPER_ATM2u_intjuniper_atm2_print(const struct pcap_pkthdr *h, register const u_char *p){        u_int16_t extracted_ethertype;        struct juniper_l2info_t l2info;        l2info.pictype = DLT_JUNIPER_ATM2;        if(juniper_parse_header(p, h, &l2info) == 0)            return l2info.header_len;        p+=l2info.header_len;        if (l2info.cookie[7] & ATM2_PKT_TYPE_MASK) { /* OAM cell ? */            oam_print(p,l2info.length,ATM_OAM_NOHEC);            return l2info.header_len;        }        if (EXTRACT_24BITS(p) == 0xfefe03 || /* NLPID encaps ? */            EXTRACT_24BITS(p) == 0xaaaa03) { /* SNAP encaps ? */            if (llc_print(p, l2info.length, l2info.caplen, NULL, NULL,                          &extracted_ethertype) != 0)                return l2info.header_len;        }        if (l2info.direction != JUNIPER_BPF_PKT_IN && /* ether-over-1483 encaps ? */            (EXTRACT_32BITS(l2info.cookie) & ATM2_GAP_COUNT_MASK)) {            ether_print(p, l2info.length, l2info.caplen);            return l2info.header_len;        }        if (p[0] == 0x03) { /* Cisco style NLPID encaps ? */            isoclns_print(p + 1, l2info.length - 1, l2info.caplen - 1);            /* FIXME check if frame was recognized */            return l2info.header_len;        }        if(juniper_ppp_heuristic_guess(p, l2info.length) != 0) /* PPPoA vcmux encaps ? */            return l2info.header_len;        if(ip_heuristic_guess(p, l2info.length) != 0) /* last try - vcmux encaps ? */            return l2info.header_len;	return l2info.header_len;}#endif/* try to guess, based on all PPP protos that are supported in * a juniper router if the payload data is encapsulated using PPP */intjuniper_ppp_heuristic_guess(register const u_char *p, u_int length) {    switch(EXTRACT_16BITS(p)) {    case PPP_IP :    case PPP_OSI :    case PPP_MPLS_UCAST :    case PPP_MPLS_MCAST :    case PPP_IPCP :    case PPP_OSICP :    case PPP_MPLSCP :    case PPP_LCP :    case PPP_PAP :    case PPP_CHAP :    case PPP_ML :#ifdef INET6    case PPP_IPV6 :    case PPP_IPV6CP :#endif        ppp_print(p, length);        break;    default:        return 0; /* did not find a ppp header */        break;    }    return 1; /* we printed a ppp packet */}intip_heuristic_guess(register const u_char *p, u_int length) {    switch(p[0]) {    case 0x45:    case 0x46:    case 0x47:    case 0x48:    case 0x49:    case 0x4a:    case 0x4b:    case 0x4c:    case 0x4d:    case 0x4e:    case 0x4f:	    ip_print(gndo, p, length);	    break;#ifdef INET6    case 0x60:    case 0x61:    case 0x62:    case 0x63:    case 0x64:    case 0x65:    case 0x66:    case 0x67:    case 0x68:    case 0x69:    case 0x6a:    case 0x6b:    case 0x6c:    case 0x6d:    case 0x6e:    case 0x6f:        ip6_print(p, length);        break;#endif    default:        return 0; /* did not find a ip header */        break;    }    return 1; /* we printed an v4/v6 packet */}intjuniper_read_tlv_value(const u_char *p, u_int tlv_type, u_int tlv_len) {   int tlv_value;   /* TLVs < 128 are little endian encoded */   if (tlv_type < 128) {       switch (tlv_len) {       case 1:

⌨️ 快捷键说明

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