X-Git-Url: https://git.tcpdump.org/tcpdump/blobdiff_plain/bcf0fb3b48edc9e642c4101e2ccf964a30cdb6f1..refs/pull/433/head:/print-smb.c diff --git a/print-smb.c b/print-smb.c index e4bacbbc..f5be9ffc 100644 --- a/print-smb.c +++ b/print-smb.c @@ -793,10 +793,10 @@ static void print_smb(netdissect_options *ndo, const u_char *buf, const u_char *maxbuf) { - u_int16_t flags2; + uint16_t flags2; int nterrcodes; int command; - u_int32_t nterror; + uint32_t nterror; const u_char *words, *maxwords, *data; const struct smbfns *fn; const char *fmt_smbheader = @@ -1079,6 +1079,16 @@ trunc: ND_PRINT((ndo, "%s", tstr)); } +static const struct tok opcode_str[] = { + { 0, "QUERY" }, + { 5, "REGISTRATION" }, + { 6, "RELEASE" }, + { 7, "WACK" }, + { 8, "REFRESH(8)" }, + { 9, "REFRESH" }, + { 15, "MULTIHOMED REGISTRATION" }, + { 0, NULL } +}; /* * print a NBT packet received across udp on port 137 @@ -1090,7 +1100,6 @@ nbt_udp137_print(netdissect_options *ndo, const u_char *maxbuf = data + length; int name_trn_id, response, opcode, nm_flags, rcode; int qdcount, ancount, nscount, arcount; - const char *opcodestr; const u_char *p; int total, i; @@ -1112,35 +1121,12 @@ nbt_udp137_print(netdissect_options *ndo, if (ndo->ndo_vflag > 1) ND_PRINT((ndo, "\n>>> ")); - ND_PRINT((ndo, "NBT UDP PACKET(137): ")); - - switch (opcode) { - case 0: opcodestr = "QUERY"; break; - case 5: opcodestr = "REGISTRATION"; break; - case 6: opcodestr = "RELEASE"; break; - case 7: opcodestr = "WACK"; break; - case 8: opcodestr = "REFRESH(8)"; break; - case 9: opcodestr = "REFRESH"; break; - case 15: opcodestr = "MULTIHOMED REGISTRATION"; break; - default: opcodestr = "OPUNKNOWN"; break; - } - ND_PRINT((ndo, "%s", opcodestr)); + ND_PRINT((ndo, "NBT UDP PACKET(137): %s", tok2str(opcode_str, "OPUNKNOWN", opcode))); if (response) { - if (rcode) - ND_PRINT((ndo, "; NEGATIVE")); - else - ND_PRINT((ndo, "; POSITIVE")); + ND_PRINT((ndo, "; %s", rcode ? "NEGATIVE" : "POSITIVE")); } - - if (response) - ND_PRINT((ndo, "; RESPONSE")); - else - ND_PRINT((ndo, "; REQUEST")); - - if (nm_flags & 1) - ND_PRINT((ndo, "; BROADCAST")); - else - ND_PRINT((ndo, "; UNICAST")); + ND_PRINT((ndo, "; %s; %s", response ? "RESPONSE" : "REQUEST", + (nm_flags & 1) ? "BROADCAST" : "UNICAST")); if (ndo->ndo_vflag < 2) return; @@ -1269,14 +1255,15 @@ smb_tcp_print(netdissect_options *ndo, if (smb_len >= 4 && caplen >= 4 && memcmp(data,"\377SMB",4) == 0) { if ((int)smb_len > caplen) { if ((int)smb_len > length) - ND_PRINT((ndo, "WARNING: Packet is continued in later TCP segments\n")); + ND_PRINT((ndo, " WARNING: Packet is continued in later TCP segments\n")); else - ND_PRINT((ndo, "WARNING: Short packet. Try increasing the snap length by %d\n", + ND_PRINT((ndo, " WARNING: Short packet. Try increasing the snap length by %d\n", smb_len - caplen)); - } + } else + ND_PRINT((ndo, " ")); print_smb(ndo, data, maxbuf > data + smb_len ? data + smb_len : maxbuf); } else - ND_PRINT((ndo, "SMB-over-TCP packet:(raw data or continuation?)\n")); + ND_PRINT((ndo, " SMB-over-TCP packet:(raw data or continuation?)\n")); return; trunc: ND_PRINT((ndo, "%s", tstr));