On Nov 30, 2008, at 11:56 PM, Sake Blok wrote:
Well, as the IP length field is 0 instead of the proper length of  
the IP
datagram, I think the whole dissection of the IP payload is not done.
This makes the whole TCP segment look like a ethernet trailer,  
including
a FCS. Which of course will be incorrect...
Yes, that's what's happening.
I fixed the IP dissector so that it only sets the tvbuff length for  
the IP datagram tvbuff after it's determined that the IP total length  
isn't obviously bogus (where "obviously bogus" means that it's less  
than the IP header length).  Doing that means that we don't dissect  
the data at the end of the packet as a trailer and FCS.
So the question is: Why is the IP length field set to 0?
Probably either TCP Segmentation Offload or Large Receive Offload -  
the network adapter on which the packet was captured probably supports  
TSO and/or LRO, and the adapter and/or driver indicate that a sent  
packet will be segmented by the adapter and/or that a received packet  
has been reassembled by the adapter by providing an IP total length of  
0 and a IP header checksum of 0 - I think TSO/LRO on a number of  
systems do that.
There's an IP preference "Support packet-capture from IP TSO-enabled  
hardware"; if you turn that option on, the IP dissector will assume  
that an IP total length of 0 indicates a TSO or LRO packet, and will  
set the length to the actual length of the packet data.  Doing that  
causes the IP payload to be dissected as TCP; if the HTTP reassembly  
options are also turned off, the TCP payload is dissected as HTTP.