[][src]Crate pcapng_writer

A pcapng encoder.

This crate contains a pcapng encoder. It can be use to write the pcapng format to a file or anything that implmenets std::io::Write.

Implementation is based on the draft standard version 02 (draft-tuexen-opsawg-pcapng-02).

Use

The blocks module contains types for the supported pcapng block types. pcapng "option" types are located in blocks::options.

writer::PcapNgWriter can be used to write blocks and options to a file.

Timestamps

pcapng define two types of timestamp resolution. utils::TimestampResolution is an enum that represents these two types. This enum has mothods to generate data to be used in the if_tsresol option, as well as the timestamp field of the Enhanced Packet Block.

Examples

Note that in the following example we are writing just a single block (an Enhanced Packet Block). This does not produce a valid pcapng file, as there is no Section Header Block, etc. This is only to demonstarate how to create a block with options, and write it to a file.

use pcapng_writer::blocks::EnhancedPacketBlock;
use pcapng_writer::writer::PcapNgWriter;
use pcapng_writer::utils::DEFAULT_TSRES;
use pcapng_writer::blocks::options::{OptionComment, OptionEndOfOpt, Options};
use std::time::{SystemTime, UNIX_EPOCH};
// create options
let comment_opt = OptionComment::new_option("Test Comment");
let eoo = OptionEndOfOpt::new_option();

// create an "Options" instance (option container)
let mut epb_options = Options::new();
epb_options.add_option(&comment_opt);
epb_options.add_option(&eoo);

// get system time in nanoseconds
let nanos = SystemTime::now()
    .duration_since(UNIX_EPOCH)
    .unwrap()
    .as_nanos();

// the actual packet content
let payload = b"\x00\x11\x22\x33\x44\x01\x00\x11\x22\x33\x44\x02\x08\x00";
let epb = EnhancedPacketBlock::new_with_timestamp(
    0,
    DEFAULT_TSRES,
    nanos,
    payload.len() as u32,
    payload.len() as u32,
    &payload[..],
    &epb_options,
);

// using a byte vector here instead of a file
let mut buf: Vec<u8> = vec![];
let mut writer = PcapNgWriter::new_le(&mut buf);
writer.write(&epb).unwrap();

Modules

blocks
constants
enums
utils
writer