💢 warts

Build Coverage crates.io docs.rs

This crate implements reading and writing warts(5) files produced by CAIDA's Scamper tool.
It relies on the excellent deku crate for serializing and deserializing the binary format.

Usage

You can run one of the examples in examples/:

bash cargo run --release --example dump data/trace_google_dns_v6_default.warts cargo run --release --example read_traceroute data/trace_google_dns_v6_default.warts cargo run --release --example write_traceroute > test.warts

To use in your own project, add the following dependency to Cargo.toml: toml [dependencies] warts = "0.3"

Limitations

The following features are currently not implemented:

Performance

Time to parse and print the traceroutes from abz-uk.team-probing.c009127.20210202.warts (52MB).
Measured with hyperfine on a 2020 M1 MacBook Air.

| Library | Time (s) | |--------------------------------------------------------------------------------------|------------| | warts / read_traceroute | 0.797 | | Scamper / sc_warts2text | 1.125 | | pywarts / parse_from_stdin.py | 12.405 | | cmand/scamper / sc_warts2text.py | 21.207 |

Object types

| Type | Structure | Name | Implemented | |----------|---------------------------|------------------------------|-------------| | 0x0001 | scamper_list_t | List | Y | | 0x0002 | scamper_cycle_t | Cycle start | Y | | 0x0003 | scamper_cycle_t | Cycle definition | Y | | 0x0004 | scamper_cycle_t | Cycle stop | Y | | 0x0005 | scamper_addr_t | Address (deprecated) | Y | | 0x0006 | scamper_trace_t | Traceroute | Y | | 0x0007 | scamper_ping_t | Ping | Y | | 0x0008 | scamper_tracelb_t | MDA traceroute | Y | | 0x0009 | scamper_dealias_t | Alias resolution | N | | 0x000a | scamper_neighbourdisc_t | Neighbour discovery | N | | 0x000b | scamper_tbit_t | TCP behaviour inference tool | N | | 0x000c | scamper_sting_t | Sting | N | | 0x000d | scamper_sniff_t | Sniff | N |