Ethereal-dev: [Ethereal-dev] Re: Dissector design question
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: ronnie sahlberg <ronniesahlberg@xxxxxxxxx>
Date: Tue, 5 Jul 2005 03:46:58 -0400
See packet-tftp.c and packet-snmp.c See the handling of conversation and registering/unregistering protocol handlers. This was successfully used for an implementation that started by using TFTP and then switched over to do SNMP on the very same socketpair. Though I think you should probably collapse the two dissectors/protocols into a single dissector/protocol and just use heuristics inside to determine what it is. On 7/5/05, Martin Mathieson <martin.mathieson@xxxxxxxxxxxx> wrote: > Hi, > > I need a bit of advice about the design of the Microsoft Media Streaming > dissectors (packet-mms-control.c and packet-mms-data.c). > > The current implementation handles these as 2 distinct protocols, where: > - control is always over TCP with a well-known (registered) server port > - there is a command from the client which indicates the client > address/port > for the data stream, so the conversation is set up (currently only when UDP > is indicated) > - the data stream dissector is called OK > - The client can also send some (one) command to the server over UDP. This > is currently implemented as part of the data dissector. > > Now I'm trying to add support for TCP data streams. In a capture I'm > testing with, the client reuses the existing control TCP connection for > data. This means that over the same TCP connection 2 different protocols > are now being used. These are distinct protocols in that they have no > common header (the control protocol has a distinctive signature). > > I've been looking for an elegant way to make the right dissector be called > for the right packet. I started off using tcp_dissect_pdus(), but this > seems quite limited because you need to supply an old-style dissector that > can't reject a packet. > > I changed to using a new-style dissector for control, hoping that after it > rejects what looks like a data packet the data dissector would then be > invoked because of the conversation that was set up with the client's TCP > address/port, but this doesn't happen... > > > I can think of 2 unattractive options at the moment: > (1) make the control protocol purely a heuristic dissector (which could > check for the previously-registered server port). As long as I set the TCP > preference to try heuristic sub-dissectors first, this should hopefully let > the control dissector reject data packets and the data dissector claim the > data packets because of the conversation that has been created. I would > prefer this if it weren't for the preference setting issue. > (2) combine the control and data dissectors into one single dissector that > registers the server tcp port, the data command udp port and also has > conversations setup for data streams. The single dissector function will > then examine the port/signature in each frame and work out how it should be > dissected. This seems to be close to what is done in the xine > implementation of mms, and would allow one simple filter to match with > control and data packets. > > Am I missing a trick? > Best regards, > Martin > > _______________________________________________ > Ethereal-dev mailing list > Ethereal-dev@xxxxxxxxxxxx > http://www.ethereal.com/mailman/listinfo/ethereal-dev >
- References:
- [Ethereal-dev] Dissector design question
- From: Martin Mathieson
- [Ethereal-dev] Dissector design question
- Prev by Date: [Ethereal-dev] Dissector design question
- Next by Date: [Ethereal-dev] updates for DNP3 dissector
- Previous by thread: [Ethereal-dev] Dissector design question
- Next by thread: [Ethereal-dev] updates for DNP3 dissector
- Index(es):