Ethereal-dev: Re: [Ethereal-dev] A question in for NBSS dissector
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <gharris@xxxxxxxxx>
Date: Tue, 15 Apr 2003 00:50:08 -0700
On Tue, Apr 15, 2003 at 12:12:08AM -0700, Huagang Xie wrote: > in packet-nbns.c > > > if (pinfo->match_port == TCP_PORT_CIFS) { > /* > * Windows 2000 CIFS clients can dispense completely > * with the NETBIOS encapsulation and directly use CIFS > * over TCP. As would be expected, the framing is > * identical, except that the length is 24 bits instead > * of 17. The only message types used are > * SESSION_MESSAGE and SESSION_KEEP_ALIVE. > */ > is_cifs = TRUE; > } else { > is_cifs = FALSE; > } > > The TCP_PORT_CIFS here is 445, but even if on port 445, the SMB/CIFS > is still over NETBIOS-SS. That depends on whether port 445 is the client or server port. If it's the server port, that's *NOT* NetBIOS Session Service, that's CIFS running directly over TCP. See Appendix B of the CIFS Technical Reference: http://www.snia.org/tech_activities/CIFS/CIFS-TR-1p00_FINAL.pdf which says 10. Appendix B -- TCP transport When operating CIFS over TCP, connections are established to TCP port 445, and each message is framed as follows: 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ZERO | LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | / SMB (Packet Type Dependent) / | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Each CIFS request starts with a 4 byte field encoded as above: a byte of zero, followed by three bytes of length; after that follows the body of the request. > Since this affect the "netbios-length" checking later, ...which is exactly what it's supposed to do. > > /* > * We have enough data for an NBSS header. > * Get the flags and length of the message, > * and see if they're sane. > */ > if (is_cifs) { > flags = 0; > length = tvb_get_ntoh24(tvb, offset + 1); That fetches the 24-bit length field from the header described above, which is what's correct if the traffic is CIFS-over-TCP. > } else { > flags = tvb_get_guint8(tvb, offset + 1); > length = tvb_get_ntohs(tvb, offset + 2); > if (flags & NBSS_FLAGS_E) > length += 65536; That fetches the flags and length fields from the header in RFC 1002: All session packets are of the following general structure: 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | TYPE | FLAGS | LENGTH | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | / TRAILER (Packet Type Dependent) / | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ > I will suggest to remove this (is_cifs) checking, Removing that checking would make Ethereal incorrectly dissect some traffic. There are some captures where SMB/CIFS is running atop the NetBIOS Session Service, and there are other captures where SMB/CIFS is running atop TCP with the Appendix B encapsulation. Therefore, Ethereal needs code to support both of them, so there needs to be an "is_cifs" Boolean that's checked. The only problem is if you have the client using port 139 or 445 when the server is using the opposite port number; in that case, as 139 < 445, the TCP dissector will first try to match 139 and then, if that doesn't match anything, it'll match 445. 139 will match NetBIOS Session Service, so if you have a client using port 139 to talk to a CIFS-over-TCP server on port 445, the traffic will be dissected as NetBIOS-over-TCP, not CIFS-over-TCP.
Attachment:
pgp75D1brhFhz.pgp
Description: PGP signature
- References:
- [Ethereal-dev] [patch] DSI more getserverinfo decoding
- From: didier
- Re: [Ethereal-dev] [patch] DSI more getserverinfo decoding
- From: Guy Harris
- [Ethereal-dev] A question in for NBSS dissector
- From: Huagang Xie
- [Ethereal-dev] [patch] DSI more getserverinfo decoding
- Prev by Date: [Ethereal-dev] A question in for NBSS dissector
- Next by Date: Re: [Ethereal-dev] Re: TCP retransmission in BGP dissector
- Previous by thread: [Ethereal-dev] A question in for NBSS dissector
- Next by thread: [Ethereal-dev] Crash when using "Per packet information"
- Index(es):