X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/dc02d078e77c6072d849d4b8ba3fb5d977324f2a..a271c5ecb9c9ea1cbecff1569eb647cfb16dc187:/print-tcp.c diff --git a/print-tcp.c b/print-tcp.c index d9ca4a34..38f80d9b 100644 --- a/print-tcp.c +++ b/print-tcp.c @@ -30,9 +30,7 @@ __RCSID("$NetBSD: print-tcp.c,v 1.8 2007/07/24 11:53:48 drochner Exp $"); #endif -#ifdef HAVE_CONFIG_H #include -#endif #include "netdissect-stdinc.h" @@ -113,6 +111,7 @@ const struct tok tcp_flag_values[] = { { TH_URG, "U" }, { TH_ECNECHO, "E" }, { TH_CWR, "W" }, + { TH_AE, "e" }, { 0, NULL } }; @@ -128,7 +127,7 @@ static const struct tok tcp_option_values[] = { { TCPOPT_TIMESTAMP, "TS" }, { TCPOPT_CC, "cc" }, { TCPOPT_CCNEW, "ccnew" }, - { TCPOPT_CCECHO, "" }, + { TCPOPT_CCECHO, "ccecho" }, { TCPOPT_SIGNATURE, "md5" }, { TCPOPT_SCPS, "scps" }, { TCPOPT_UTO, "uto" }, @@ -166,7 +165,7 @@ tcp_print(netdissect_options *ndo, { const struct tcphdr *tp; const struct ip *ip; - u_char flags; + uint16_t flags; u_int hlen; char ch; uint16_t sport, dport, win, urp; @@ -248,7 +247,7 @@ tcp_print(netdissect_options *ndo, return; } - flags = GET_U_1(tp->th_flags); + flags = tcp_get_flags(tp); ND_PRINT("Flags [%s]", bittok2str_nosep(tcp_flag_values, "none", flags)); if (!ndo->ndo_Sflag && (flags & TH_ACK)) { @@ -426,14 +425,19 @@ tcp_print(netdissect_options *ndo, } } - if (flags & TH_ACK) { + if (flags & TH_ACK) ND_PRINT(", ack %u", ack); - } + else + if (ndo->ndo_vflag > 1 && ack != 0) + ND_PRINT(", [ack %u != 0 while ACK flag not set]", ack); ND_PRINT(", win %u", win); if (flags & TH_URG) ND_PRINT(", urg %u", urp); + else + if (ndo->ndo_vflag > 1 && urp != 0) + ND_PRINT(", [urg %u != 0 while URG flag not set]", urp); /* * Handle any options. */ @@ -445,7 +449,7 @@ tcp_print(netdissect_options *ndo, hlen -= sizeof(*tp); cp = (const u_char *)tp + sizeof(*tp); ND_PRINT(", options ["); - while (hlen > 0) { + while (hlen != 0) { if (ch != '\0') ND_PRINT("%c", ch); opt = GET_U_1(cp); @@ -746,7 +750,12 @@ tcp_print(netdissect_options *ndo, return; } - if (IS_SRC_OR_DST_PORT(TELNET_PORT)) { + if (IS_SRC_OR_DST_PORT(FTP_PORT)) { + ND_PRINT(": "); + ftp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(SSH_PORT)) { + ssh_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(TELNET_PORT)) { telnet_print(ndo, bp, length); } else if (IS_SRC_OR_DST_PORT(SMTP_PORT)) { ND_PRINT(": "); @@ -754,42 +763,45 @@ tcp_print(netdissect_options *ndo, } else if (IS_SRC_OR_DST_PORT(WHOIS_PORT)) { ND_PRINT(": "); whois_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(BGP_PORT)) - bgp_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(PPTP_PORT)) - pptp_print(ndo, bp); - else if (IS_SRC_OR_DST_PORT(REDIS_PORT)) - resp_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(SSH_PORT)) - ssh_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(NAMESERVER_PORT)) { + /* over_tcp: TRUE, is_mdns: FALSE */ + domain_print(ndo, bp, length, TRUE, FALSE); + } else if (IS_SRC_OR_DST_PORT(HTTP_PORT)) { + ND_PRINT(": "); + http_print(ndo, bp, length); #ifdef ENABLE_SMB - else if (IS_SRC_OR_DST_PORT(NETBIOS_SSN_PORT)) + } else if (IS_SRC_OR_DST_PORT(NETBIOS_SSN_PORT)) { nbt_tcp_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(SMB_PORT)) +#endif + } else if (IS_SRC_OR_DST_PORT(BGP_PORT)) { + bgp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(RPKI_RTR_PORT)) { + rpki_rtr_print(ndo, bp, length); +#ifdef ENABLE_SMB + } else if (IS_SRC_OR_DST_PORT(SMB_PORT)) { smb_tcp_print(ndo, bp, length); #endif + } else if (IS_SRC_OR_DST_PORT(RTSP_PORT)) { + ND_PRINT(": "); + rtsp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(MSDP_PORT)) { + msdp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(LDP_PORT)) { + ldp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(PPTP_PORT)) + pptp_print(ndo, bp); + else if (IS_SRC_OR_DST_PORT(REDIS_PORT)) + resp_print(ndo, bp, length); else if (IS_SRC_OR_DST_PORT(BEEP_PORT)) beep_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(OPENFLOW_PORT_OLD) || IS_SRC_OR_DST_PORT(OPENFLOW_PORT_IANA)) + else if (IS_SRC_OR_DST_PORT(OPENFLOW_PORT_OLD) || IS_SRC_OR_DST_PORT(OPENFLOW_PORT_IANA)) { openflow_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(FTP_PORT)) { - ND_PRINT(": "); - ftp_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(HTTP_PORT) || IS_SRC_OR_DST_PORT(HTTP_PORT_ALT)) { + } else if (IS_SRC_OR_DST_PORT(HTTP_PORT_ALT)) { ND_PRINT(": "); http_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(RTSP_PORT) || IS_SRC_OR_DST_PORT(RTSP_PORT_ALT)) { + } else if (IS_SRC_OR_DST_PORT(RTSP_PORT_ALT)) { ND_PRINT(": "); rtsp_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(NAMESERVER_PORT)) { - /* over_tcp: TRUE, is_mdns: FALSE */ - domain_print(ndo, bp, length, TRUE, FALSE); - } else if (IS_SRC_OR_DST_PORT(MSDP_PORT)) { - msdp_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(RPKI_RTR_PORT)) { - rpki_rtr_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(LDP_PORT)) { - ldp_print(ndo, bp, length); } else if ((IS_SRC_OR_DST_PORT(NFS_PORT)) && length >= 4) { /*