Wireshark-dev: Re: [Wireshark-dev] Adding my own dissector prevents others from running
From: Guy Harris <guy@xxxxxxxxxxxx>
Date: Tue, 12 Dec 2006 01:44:33 -0800

On Dec 12, 2006, at 12:34 AM, UsAaR33 wrote:

	I implemented the dissect function as per the template of
README.developer and am using new_create_dissector_handle to register my dissector. Indeed, the logic appears to be working - the packets that I
don't recognize as my own (invalid headers) are not dissected by my
dissector.  However, for some strange reason they are not being
dissected by the SMB dissector either - rather they are merely left as
"TCP".

Only one dissector can be registered for a particular port number; the last one registered wins (and one should think of "who wins" as random - it's actually predictable, but we don't guarantee we won't change it). Yours is probably getting registered last.

Note also that the NetBIOS Session Service dissector, which is what normally registers for port 139, is *not* a heuristic or new-style dissector - it always accepts packets, so, even if multiple dissectors could be registered for a particular port number, if the NetBIOS Session Service dissector saw the packet first, no other dissector would get a chance.

	I suspect this is not a rare occurrence (though I couldn't find any
information about it on the web). Would anyone know how to ensure that
both my own - and the SMB - dissector can run?

Register as a heuristic dissector, reject all packets not for port 139, reject all packets that your dissector doesn't recognize, and set the "Try heuristic sub-dissectors first" preference for the TCP dissector to "true".

Either that, or stop using a port that's already assigned to the NetBIOS Session Service for your protocol.