Replies below in blue.

I also have one other question: What happens when in the process of dissecting 
a packet, you encounter a protocol that is not recognized? What happens to that 
packet? 

And thank you very much for your detailed reply!

From: Guy Harris <g...@xxxxxxxxxxxx>



Date: Mon, 9 Mar 2009 18:58:26 -0700








Also, are the dissectors in the heuristics list determined by  
statistics?

No.
For example, if say Protocol A follows Protocol B 80% of the time  
from traffic observed,

Which traffic?

At one site, protocol A might follow protocol B 80% of the time.  At  
another site, it might follow it 0% of the time, because, at that  
site, protocol A might not be used at all.

then Protocol A is included in the heuristic list of dissector to  
try by Protocol B?

If

        1) there's a dissector for protocol A;

        2) protocol A can follow (be encapsulated in) protocol B;

        3) you can't tell by looking at some "next protocol" field in  
protocol B whether it's followed by protocol A or not, you have to  
guess by looking at the payload of protocol B;
        

4) protocol B supports heuristic dissectors for protocols that follow  
it;


5) whoever wrote the dissector for protocol B knew all that and knew  
that they should therefore make the dissector for protocol A a  
heuristic dissector for protocol B;
then the proto_reg_handoff_ routine for the dissector module for  
protocol A would register the dissector for protocol A in the list of  
heuristic dissectors for protocol B.

Points 1 to 4 are the criteria for whether to include a protocol in the list of 
heuristic dissectors of another protocol?

And am I right to say that the protocol tree is built before the  
first packet is captured,

No, because there's no such thing as "*the* protocol tree" in general;  
a packet has *a* protocol tree that shows the dissection of all the  
protocols in that packet, so one can speak only of "the protocol tree"  
for a given packet, which obviously can't be created until that packet  
has been read.  (Note that the packet might be captured minutes, or  
hours, or days, or weeks, or months, or years... before the packet is  
read; it might have been written to a capture file when it was  
captured, and Wireshark or TShark might be reading the file much later.)

I thought there was a general protocol tree that every packet would try to 
follow, like a roadmap, and it encompasses all possible known relationships 
among the various headers. For example, the IP header would branch out to other 
dissectors, such as TCP or UDP, and a packet would test for these other 
headers. Although I realize now this may be more of a conceptual idea than an 
implementation method.

So in reality, every packet has its own protocol tree that is built as 
protocols are dissected. So 2 packets may have very different protocol trees? 
Isn't this quite taxing for the system, because the system would have to keep 
track of all these protocol trees until the packets are completely dissected 
and the memory for the trees can be released? What is the purpose of building a 
protocol tree for every packet? Just to display that information for the user?

Where can I find an example where dissect-protocol() is called?

What do you mean by "dissect-protocol()"?

For example "dissect_ip()", "dissect_gtp()" etc.


      
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <[email protected]>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:[email protected]?subject=unsubscribe

Reply via email to