On Apr 8, 2011, at 7:51 PM, Darren Reed <darren.r...@oracle.com> wrote:

> Printing PPI packets with tcpdump does not turn out
> to be that hard.
> 
> My simple tests have produced the output as below.

Your simple tests were with invalid PPI files; as the PPI spec:

        http://www.cacetech.com/documents/PPI%20Header%20format%201.0.7.pdf

says:

        Multi-byte integers in the packet header and field headers MUST be 
stored as little-endian. The endianness of field data may be either big- or 
little-endian, and MUST be noted in the field description. The total length of 
the packet header plus all field headers and field data MUST be padded to a 
32-bit boundary.

and the code does

        len = EXTRACT_16BITS(&hdr->ppi_len);
        dlt = EXTRACT_32BITS(&hdr->ppi_dlt);

which treats the fields in the packet header as big-endian, not little-endian, 
so...

> 19:20:51.470264 , DLT IPV4 (228) len 0, length 76: ip: (tos 0x0, ttl 255, id 
> 509, offset 0, flags [+, DF], proto ICMP (1), length 68)
>   1.1.1.1 > 1.1.1.2: ICMP echo request, id 35462, seq 3, length 48
>       0x0000:  0000 0000 0000 00e4 4500 0044 01fd 6000
>       0x0010:  ff01 55b7 0101 0101 0101 0102 0800 45bd
>       0x0020:  8a86 0003 4d9f c283 0007 2c8c 0809 0a0b
>       0x0030:  0c0d 0e0f 1011 1213 1415 1617 1819 1a1b
>       0x0040:  1c1d 1e1f 2021 2223 2425 2627

...if that packet really had 0x00 0xE4 rather than 0xE4 0x00 in the DLT field, 
that packet has a DLT value of 58368, which is not a currently-assigned 
LINKTYPE_/DLT_ value.

I've checked a fix in to treat the length and DLT values as little-endian.
_______________________________________________
tcpdump-workers mailing list
tcpdump-workers@lists.tcpdump.org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers

Reply via email to