pub struct Capture<T: State + ?Sized> { /* private fields */ }
Expand description

This is a pcap capture handle which is an abstraction over the pcap_t provided by pcap. There are many ways to instantiate and interact with a pcap handle, so phantom types are used to express these behaviors.

Capture<Inactive> is created via Capture::from_device(). This handle is inactive, so you cannot (yet) obtain packets from it. However, you can configure things like the buffer size, snaplen, timeout, and promiscuity before you activate it.

Capture<Active> is created by calling .open() on a Capture<Inactive>. This activates the capture handle, allowing you to get packets with .next_packet() or apply filters with .filter().

Capture<Offline> is created via Capture::from_file(). This allows you to read a pcap format dump file as if you were opening an interface – very useful for testing or analysis.

Capture<Dead> is created via Capture::dead(). This allows you to create a pcap format dump file without needing an active capture.

Example:

let cap = Capture::from_device(Device::lookup().unwrap()) // open the "default" interface
              .unwrap() // assume the device exists and we are authorized to open it
              .open() // activate the handle
              .unwrap(); // assume activation worked

while let Ok(packet) = cap.next_packet() {
    println!("received packet! {:?}", packet);
}

Implementations

Opens an offline capture handle from a pcap dump file, given a path.

Opens an offline capture handle from a pcap dump file, given a path. Takes an additional precision argument specifying the time stamp precision desired.

Opens an offline capture handle from a pcap dump file, given a file descriptor.

Safety

Unsafe, because the returned Capture assumes it is the sole owner of the file descriptor.

Opens an offline capture handle from a pcap dump file, given a file descriptor. Takes an additional precision argument specifying the time stamp precision desired.

Safety

Unsafe, because the returned Capture assumes it is the sole owner of the file descriptor.

Get the major version number of the pcap dump file format.

Get the minor version number of the pcap dump file format.

Get the (major, minor) version number of the pcap dump file format.

Opens a capture handle for a device. You can pass a Device or an &str device name here. The handle is inactive, but can be activated via .open().

Example
use pcap::*;

// Usage 1: Capture from a single owned device
let dev: Device = pcap::Device::lookup()
    .expect("device lookup failed")
    .expect("no device available");
let cap1 = Capture::from_device(dev);

// Usage 2: Capture from an element of device list.
let list: Vec<Device> = pcap::Device::list().unwrap();
let cap2 = Capture::from_device(list[0].clone());

// Usage 3: Capture from `&str` device name
let cap3 = Capture::from_device("eth0");

Activates an inactive capture created from Capture::from_device() or returns an error.

Set the read timeout for the Capture. By default, this is 0, so it will block indefinitely.

Set the time stamp type to be used by a capture device.

Set promiscuous mode on or off. By default, this is off.

Set immediate mode on or off. By default, this is off.

Note that in WinPcap immediate mode is set by passing a 0 argument to min_to_copy. Immediate mode will be unset if min_to_copy is later called with a non-zero argument. Immediate mode is unset by resetting min_to_copy to the WinPcap default possibly changing a previously set value. When using min_to_copy, it is best to avoid immediate_mode.

Set rfmon mode on or off. The default is maintained by pcap.

Set the buffer size for incoming packet data.

The default is 1000000. This should always be larger than the snaplen.

Set the time stamp precision returned in captures.

Set the snaplen size (the maximum length of a packet captured into the buffer). Useful if you only want certain headers, but not the entire packet.

The default is 65535.

List the datalink types that this captured device supports.

Set the datalink type for the current capture handle.

Get the current datalink type for this capture handle.

Create a Savefile context for recording captured packets using this Capture’s configurations.

Create a Savefile context for recording captured packets using this Capture’s configurations. The output is written to a raw file descriptor which is opened in "w" mode.

Safety

Unsafe, because the returned Savefile assumes it is the sole owner of the file descriptor.

Reopen a Savefile context for recording captured packets using this Capture’s configurations. This is similar to savefile() but does not create the file if it does not exist and, if it does already exist, and is a pcap file with the same byte order as the host opening the file, and has the same time stamp precision, link-layer header type, and snapshot length as p, it will write new packets at the end of the file.

Set the direction of the capture

Blocks until a packet is returned from the capture handle or an error occurs.

pcap captures packets and places them into a buffer which this function reads from.

Warning

This buffer has a finite length, so if the buffer fills completely new packets will be discarded temporarily. This means that in realtime situations, you probably want to minimize the time between calls to next_packet() method.

Return an iterator that call Self::next_packet() forever. Require a PacketCodec

Returns this capture as a [futures::Stream] of packets.

Errors

If this capture is set to be blocking, or if the network device does not support select(), an error will be returned.

Sets the filter on the capture using the given BPF program string. Internally this is compiled using pcap_compile(). optimize controls whether optimization on the resulting code is performed

See http://biot.com/capstats/bpf.html for more information about this syntax.

Get capture statistics about this capture. The values represent packet statistics from the start of the run to the time of the call.

See https://www.tcpdump.org/manpages/pcap_stats.3pcap.html for per-platform caveats about how packet statistics are calculated.

Sends a packet over this capture handle’s interface.

Set the capture to be non-blocking. When this is set, Self::next_packet() may return an error indicating that there is no packet available to be read.

Creates a “fake” capture handle for the given link type.

Creates a “fake” capture handle for the given link type and timestamp precision.

Compiles the string into a filter program using pcap_compile.

Trait Implementations

Returns the file descriptor for a live capture.

Executes the destructor for this type. Read more
Converts to this type from the input type.
Converts to this type from the input type.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.