?? print-udp.c
字號:
}#endifstatic voidudpipaddr_print(const struct ip *ip, int sport, int dport){#ifdef INET6 const struct ip6_hdr *ip6; if (IP_V(ip) == 6) ip6 = (const struct ip6_hdr *)ip; else ip6 = NULL; if (ip6) { if (ip6->ip6_nxt == IPPROTO_UDP) { if (sport == -1) { (void)printf("%s > %s: ", ip6addr_string(&ip6->ip6_src), ip6addr_string(&ip6->ip6_dst)); } else { (void)printf("%s.%s > %s.%s: ", ip6addr_string(&ip6->ip6_src), udpport_string(sport), ip6addr_string(&ip6->ip6_dst), udpport_string(dport)); } } else { if (sport != -1) { (void)printf("%s > %s: ", udpport_string(sport), udpport_string(dport)); } } } else#endif /*INET6*/ { if (ip->ip_p == IPPROTO_UDP) { if (sport == -1) { (void)printf("%s > %s: ", ipaddr_string(&ip->ip_src), ipaddr_string(&ip->ip_dst)); } else { (void)printf("%s.%s > %s.%s: ", ipaddr_string(&ip->ip_src), udpport_string(sport), ipaddr_string(&ip->ip_dst), udpport_string(dport)); } } else { if (sport != -1) { (void)printf("%s > %s: ", udpport_string(sport), udpport_string(dport)); } } }}voidudp_print(register const u_char *bp, u_int length, register const u_char *bp2, int fragmented){ register const struct udphdr *up; register const struct ip *ip; register const u_char *cp; register const u_char *ep = bp + length; u_int16_t sport, dport, ulen;#ifdef INET6 register const struct ip6_hdr *ip6;#endif if (ep > snapend) ep = snapend; up = (struct udphdr *)bp; ip = (struct ip *)bp2;#ifdef INET6 if (IP_V(ip) == 6) ip6 = (struct ip6_hdr *)bp2; else ip6 = NULL;#endif /*INET6*/ cp = (u_char *)(up + 1); if (!TTEST(up->uh_dport)) { udpipaddr_print(ip, -1, -1); (void)printf("[|udp]"); return; } sport = EXTRACT_16BITS(&up->uh_sport); dport = EXTRACT_16BITS(&up->uh_dport); if (length < sizeof(struct udphdr)) { udpipaddr_print(ip, sport, dport); (void)printf("truncated-udp %d", length); return; } length -= sizeof(struct udphdr); if (cp > snapend) { udpipaddr_print(ip, sport, dport); (void)printf("[|udp]"); return; } ulen = EXTRACT_16BITS(&up->uh_ulen); if (ulen < 8) { udpipaddr_print(ip, sport, dport); (void)printf("truncated-udplength %d", ulen); return; } if (packettype) { register struct sunrpc_msg *rp; enum sunrpc_msg_type direction; switch (packettype) { case PT_VAT: udpipaddr_print(ip, sport, dport); vat_print((void *)(up + 1), up); break; case PT_WB: udpipaddr_print(ip, sport, dport); wb_print((void *)(up + 1), length); break; case PT_RPC: rp = (struct sunrpc_msg *)(up + 1); direction = (enum sunrpc_msg_type)EXTRACT_32BITS(&rp->rm_direction); if (direction == SUNRPC_CALL) sunrpcrequest_print((u_char *)rp, length, (u_char *)ip); else nfsreply_print((u_char *)rp, length, (u_char *)ip); /*XXX*/ break; case PT_RTP: udpipaddr_print(ip, sport, dport); rtp_print((void *)(up + 1), length, up); break; case PT_RTCP: udpipaddr_print(ip, sport, dport); while (cp < ep) cp = rtcp_print(cp, ep); break; case PT_SNMP: udpipaddr_print(ip, sport, dport); snmp_print((const u_char *)(up + 1), length); break; case PT_CNFP: udpipaddr_print(ip, sport, dport); cnfp_print(cp, (const u_char *)ip); break; case PT_TFTP: udpipaddr_print(ip, sport, dport); tftp_print(cp, length); break; case PT_AODV: udpipaddr_print(ip, sport, dport); aodv_print((const u_char *)(up + 1), length,#ifdef INET6 ip6 != NULL);#else 0);#endif break; } return; } if (!qflag) { register struct sunrpc_msg *rp; enum sunrpc_msg_type direction; rp = (struct sunrpc_msg *)(up + 1); if (TTEST(rp->rm_direction)) { direction = (enum sunrpc_msg_type)EXTRACT_32BITS(&rp->rm_direction); if (dport == NFS_PORT && direction == SUNRPC_CALL) { nfsreq_print((u_char *)rp, length, (u_char *)ip); return; } if (sport == NFS_PORT && direction == SUNRPC_REPLY) { nfsreply_print((u_char *)rp, length, (u_char *)ip); return; }#ifdef notdef if (dport == SUNRPC_PORT && direction == SUNRPC_CALL) { sunrpcrequest_print((u_char *)rp, length, (u_char *)ip); return; }#endif } if (TTEST(((struct LAP *)cp)->type) && ((struct LAP *)cp)->type == lapDDP && (atalk_port(sport) || atalk_port(dport))) { if (vflag) fputs("kip ", stdout); llap_print(cp, length); return; } } udpipaddr_print(ip, sport, dport); if (IP_V(ip) == 4 && (vflag > 1) && !fragmented) { int sum = up->uh_sum; if (sum == 0) { (void)printf("[no cksum] "); } else if (TTEST2(cp[0], length)) { sum = udp_cksum(ip, up, length + sizeof(struct udphdr)); if (sum != 0) (void)printf("[bad udp cksum %x!] ", sum); else (void)printf("[udp sum ok] "); } }#ifdef INET6 if (IP_V(ip) == 6 && ip6->ip6_plen && vflag && !fragmented) { int sum = up->uh_sum; /* for IPv6, UDP checksum is mandatory */ if (TTEST2(cp[0], length)) { sum = udp6_cksum(ip6, up, length + sizeof(struct udphdr)); if (sum != 0) (void)printf("[bad udp cksum %x!] ", sum); else (void)printf("[udp sum ok] "); } }#endif if (!qflag) {#define ISPORT(p) (dport == (p) || sport == (p)) if (ISPORT(NAMESERVER_PORT)) ns_print((const u_char *)(up + 1), length, 0); else if (ISPORT(MULTICASTDNS_PORT)) ns_print((const u_char *)(up + 1), length, 1); else if (ISPORT(TIMED_PORT)) timed_print((const u_char *)(up + 1)); else if (ISPORT(TFTP_PORT)) tftp_print((const u_char *)(up + 1), length); else if (ISPORT(IPPORT_BOOTPC) || ISPORT(IPPORT_BOOTPS)) bootp_print((const u_char *)(up + 1), length); else if (ISPORT(RIP_PORT)) rip_print((const u_char *)(up + 1), length); else if (ISPORT(AODV_PORT)) aodv_print((const u_char *)(up + 1), length,#ifdef INET6 ip6 != NULL);#else 0);#endif else if (ISPORT(ISAKMP_PORT)) isakmp_print(gndo, (const u_char *)(up + 1), length, bp2); else if (ISPORT(ISAKMP_PORT_NATT)) isakmp_rfc3948_print(gndo, (const u_char *)(up + 1), length, bp2);#if 1 /*???*/ else if (ISPORT(ISAKMP_PORT_USER1) || ISPORT(ISAKMP_PORT_USER2)) isakmp_print(gndo, (const u_char *)(up + 1), length, bp2);#endif else if (ISPORT(SNMP_PORT) || ISPORT(SNMPTRAP_PORT)) snmp_print((const u_char *)(up + 1), length); else if (ISPORT(NTP_PORT)) ntp_print((const u_char *)(up + 1), length); else if (ISPORT(KERBEROS_PORT) || ISPORT(KERBEROS_SEC_PORT)) krb_print((const void *)(up + 1)); else if (ISPORT(L2TP_PORT)) l2tp_print((const u_char *)(up + 1), length);#ifdef TCPDUMP_DO_SMB else if (ISPORT(NETBIOS_NS_PORT)) nbt_udp137_print((const u_char *)(up + 1), length); else if (ISPORT(NETBIOS_DGRAM_PORT)) nbt_udp138_print((const u_char *)(up + 1), length);#endif else if (dport == 3456) vat_print((const void *)(up + 1), up); else if (ISPORT(ZEPHYR_SRV_PORT) || ISPORT(ZEPHYR_CLT_PORT)) zephyr_print((const void *)(up + 1), length); /* * Since there are 10 possible ports to check, I think * a <> test would be more efficient */ else if ((sport >= RX_PORT_LOW && sport <= RX_PORT_HIGH) || (dport >= RX_PORT_LOW && dport <= RX_PORT_HIGH)) rx_print((const void *)(up + 1), length, sport, dport, (u_char *) ip);#ifdef INET6 else if (ISPORT(RIPNG_PORT)) ripng_print((const u_char *)(up + 1), length); else if (ISPORT(DHCP6_SERV_PORT) || ISPORT(DHCP6_CLI_PORT)) { dhcp6_print((const u_char *)(up + 1), length); }#endif /*INET6*/ /* * Kludge in test for whiteboard packets. */ else if (dport == 4567) wb_print((const void *)(up + 1), length); else if (ISPORT(CISCO_AUTORP_PORT)) cisco_autorp_print((const void *)(up + 1), length); else if (ISPORT(RADIUS_PORT) || ISPORT(RADIUS_NEW_PORT) || ISPORT(RADIUS_ACCOUNTING_PORT) || ISPORT(RADIUS_NEW_ACCOUNTING_PORT) ) radius_print((const u_char *)(up+1), length); else if (dport == HSRP_PORT) hsrp_print((const u_char *)(up + 1), length); else if (ISPORT(LWRES_PORT)) lwres_print((const u_char *)(up + 1), length); else if (ISPORT(LDP_PORT)) ldp_print((const u_char *)(up + 1), length); else if (ISPORT(OLSR_PORT)) olsr_print((const u_char *)(up + 1), length); else if (ISPORT(MPLS_LSP_PING_PORT)) lspping_print((const u_char *)(up + 1), length); else if (dport == BFD_CONTROL_PORT || dport == BFD_ECHO_PORT ) bfd_print((const u_char *)(up+1), length, dport); else if (ISPORT(LMP_PORT)) lmp_print((const u_char *)(up + 1), length); else if (ISPORT(VQP_PORT)) vqp_print((const u_char *)(up + 1), length); else if (ISPORT(SFLOW_PORT)) sflow_print((const u_char *)(up + 1), length); else if (dport == LWAPP_CONTROL_PORT) lwapp_control_print((const u_char *)(up + 1), length, 1); else if (sport == LWAPP_CONTROL_PORT) lwapp_control_print((const u_char *)(up + 1), length, 0); else if (ISPORT(LWAPP_DATA_PORT)) lwapp_data_print((const u_char *)(up + 1), length); else if (ISPORT(SIP_PORT)) sip_print((const u_char *)(up + 1), length); else if (ISPORT(SYSLOG_PORT)) syslog_print((const u_char *)(up + 1), length); else (void)printf("UDP, length %u", (u_int32_t)(ulen - sizeof(*up)));#undef ISPORT } else (void)printf("UDP, length %u", (u_int32_t)(ulen - sizeof(*up)));}/* * Local Variables: * c-style: whitesmith * c-basic-offset: 8 * End: */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -