tcpdump mailing list archives
Re: pcap and loopback headers
From: Guy Harris <guy () alum mit edu>
Date: Thu, 27 Jul 2006 00:29:02 -0700
Adam M. wrote:
This is probably a FAQ++, but I'm having trouble using Pcap for savefiles that were captured from a loopback device. There are 2 problems here: 1) In general, how is one supposed to determine what the layer-2 protocol is?
Call pcap_datalink() on the pcap_t. It'll indicate what the layer-2 *header* is - which might not directly correspond to the type of device on which you're capturing; 802.11 device drivers and devices might supply Ethernet headers (DLT_EN10MB) or 802.11 headers (DLT_IEEE802_11) or 802.11 headers plus radio information (DLT_PRISM_HEADER, DLT_IEEE802_11_RADIO, DLT_IEEE802_11_RADIO_AVS), and loopback devices might supply traditional BSD-style loopback headers (DLT_NULL) or OpenBSD-style loopback headers (DLT_LOOP) or Ethernet headers (DLT_EN10MB).
2) It seems that the loopback header format is different for Linux and BSD/Mac. Linux seems to 'fake' the header with an Ethernet-style format with zero'd out source/destination addresses, and only fill in the layer-3 protocol number. BSD/Mac use a single 4-byte field to indicate the layer-3 protocol number.
Exactly.Furthermore, different BSDs have different headers; FreeBSD, NetBSD, and OS X supply DLT_NULL headers, with the 4-byte field being in host byte order, and newer versions of OpenBSD supply DLT_LOOP headers, with the 4-byte field being in *network* byte order.
In addition, with DLT_NULL and DLT_LOOP, IPv4 has the same layer-3 protocol number in all BSDs (AF_INET is 2 in all of them), but IPv6 has different link-layer type values in different BSDs (AF_INET6 is 24 in OpenBSD and NetBSD, 28 in FreeBSD, and 30 in OS X/Darwin).
How does one handle this when parsing packets read from Pcap?
By using pcap_datalink() to determine the link-layer header type. - This is the tcpdump-workers list. Visit https://lists.sandelman.ca/ to unsubscribe.
Current thread:
- pcap and loopback headers Adam M. (Jul 26)
- Re: pcap and loopback headers Guy Harris (Jul 27)