# plotcap
## Introduction
`plotcap` is a small command line utility for plotting the packet and data rates of the network traffic in a PCAP file.
It aggregates three measurements at regular intervals (default of 1s, but adjustable via the `-i` argument) seconds:
- Packet count
- Bytes on the wire
- Bytes captured (different from the wire size if snaplen is less than the packet size)
`plotcap` then writes an executable [gnuplot](http://www.gnuplot.info/) script that embeds the data for the above measurements
and plots them on two Y axis (left for packets per second, right for Bytes per second) with relative time on the X axis.
Because the output file can be relatively small, you can easily copy it off the system where `plotcap` is executed
(a handy trick in constrained environments, especially with a statically linked binary - see the section below) and
then execute the script on your laptop (or any GUI system with `gnuplot` installed) for visualisation.
Note that the output script runs `gnuplot` in persistent mode (`-p`) and uses `pause mouse close` to allow interaction with the
plot. This is useful for zooming into areas (try right-click and drag).
## Building
To install the latest version of `plotcap`, ensure you have a [Rust toolchain installed](https://rustup.rs/), then run:
```shell
cargo install plotcap
```
Or, to build from source (binary in `target/release/plotcap`):
```shell
cargo build --release
```
To build a statically linked version of `plotcap`, you need the Rust MUSL toolchain, which you can install with:
```shell
rustup target add x86_64-unknown-linux-musl
```
...after which you can build it with:
```shell
cargo build --target=x86_64-unknown-linux-musl --release
```
The resulting static binary is located at `target/x86_64-unknown-linux-musl/release/plotcap`.
## Usage
```shell
plotcap --help
plotcap 0.1.1
Simeon Miteff <simeon.miteff@corelight.com>
Plot packet and data rates over time given a PCAP file, with gnuplot.
USAGE:
plotcap [OPTIONS] --read <FILE> --output <FILE>
OPTIONS:
-h, --help Print help information
-i, --interval <INTERVAL> [default: "1 second"]
-o, --output <FILE>
-r, --read <FILE>
-V, --version Print version information
```
## Examples
`smtp.pcap` is a ~2h, ~4.3GB file with 8 million packets in it. To reduce the number of plot points we increase the aggregation
to 60s with `-i 60s`:
```shell
plotcap -r smtp.pcap -i 60s -o smtp-60s.plg
```
The resulting `smtp-60s.plg` is 142 lines (5.4KB). Running the script produces:

`everything.pcap` is a ~37s, ~38GB file with 37 million packets in it. We run `plotcap` with the default aggregation interval:
```shell
plotcap -r everything.pcap -o everything.plg
```
The output file is 60 lines (2.5KB). Running it produces:
