Ethereal-users: Re: [Ethereal-users] Include timestamp with decoded packet
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Guy Harris <guy@xxxxxxxxxx>
Date: Mon, 10 Mar 2003 11:10:47 -0800
On Mon, Mar 10, 2003 at 04:50:03PM +0100, Jonas Harvard wrote: > How do I translate timestamps pertaining to each packet, from the raw > data generated by tethereal? By "raw data generated by Tethereal" do you mean the output writted when you run Tethereal with the "-w" flag? If so, then it's just a libpcap-format capture, and you can use libpcap/WinPcap to read them (i.e., you don't have to write your own code to understand the file format - just let libpcap do it for you). This means that you'll call "pcap_open_offline()" to open the file, and then call "pcap_loop()" to read through the file, and pass to "pcap_loop()" a pointer to a callback routine which is called for each packet in the file. To quote the current CVS version of the libpcap man page: pcap_dispatch() is used to collect and process packets. cnt specifies the maximum number of packets to process before returning. This is not a minimum number; when reading a live capture, only one bufferful of packets is read at a time, so fewer than cnt packets may be processed. A cnt of -1 processes all the packets received in one buffer when reading a live capture, or all the packets in the file when reading a ``savefile''. callback specifies a routine to be called with three arguments: a u_char pointer which is passed in from pcap_dispatch(), a const struct pcap_pkthdr pointer to a structure with the following members: ts a struct timeval containing the time when the packet was captured caplen a bpf_u_int32 giving the number of bytes of the packet that are available from the capture len a bpf_u_int32 giving the length of the packet, in bytes (which might be more than the number of bytes available from the capture, if the length of the packet is larger than the maximum number of bytes to capture) and a const u_char pointer to the first caplen (as given in the struct pcap_pkthdr a pointer to which is passed to the callback routine) bytes of data from the packet (which won't necessarily be the entire packet; to capture the entire packet, you will have to provide a value for snaplen in your call to pcap_open_live() that is sufficiently large to get all of the packet's data - a value of 65535 should be suffi- cient on most if not all networks). ... pcap_loop() is similar to pcap_dispatch() except it keeps reading packets until cnt packets are processed or an error occurs. It does not return when live read timeouts occur. Rather, specifying a non-zero read timeout to pcap_open_live() and then calling pcap_dispatch() allows the reception and processing of any packets that arrive when the timeout occurs. A negative cnt causes pcap_loop() to loop forever (or at least until an error occurs). A negative number is returned on an error; 0 is returned if cnt is exhausted. so the time stamp is supplied as part of the "struct pcap_pkthdr" a pointer to which is passed to your callback routine. A "struct timeval" contains two members: "tv_sec", which is the seconds portion of the time stamp, in seconds since January 1, 1970, 00:00:00 GMT (GMT, *NOT* local time!), and "tv_usec", which is the microseconds portion of the time stamp. To display that time stamp, you'd use "localtime()" (available on all UNIX systems, as well as in the C library for Windows) to convert the "tv_sec" to a "struct tm", and print out the members of the "struct tm". You'd then display the microseconds portion right after the seconds portion of the time stamp, with a "." or "," between them, and with the appropriate number of leading zeroes.
- References:
- [Ethereal-users] Include timestamp with decoded packet
- From: Jonas Harvard
- [Ethereal-users] Include timestamp with decoded packet
- Prev by Date: [Ethereal-users] 802.11 mgmt, control, data captured frames needed
- Next by Date: Re: [Ethereal-users] PEAP
- Previous by thread: [Ethereal-users] Include timestamp with decoded packet
- Next by thread: [Ethereal-users] issue with giop syncscope value
- Index(es):