spftrace

The spftrace utility is a tool for executing, analysing and displaying SPF queries. SPF is specified in [RFC 7208].

This utility executes an SPF query with IP address and domain and shows the result graphically as an evaluation tree.

This utility uses the [viaspf] library to execute SPF queries. The viaspf library can trace a query as it executes and makes the trace available as structured data in its API. spftrace then analyses this data and displays it.

Thanks to the underlying execution engine being a real, RFC-conformant SPF implementation, spftrace handles all SPF policies correctly. Less well-known features of SPF such as macros, dual CIDR prefix lengths, exp modifiers, or the void lookup limit are all evaluated according to spec.

Installation

The spftrace utility is a [Rust] program. Install it with Cargo as usual:

cargo install --locked spftrace

The minimum supported Rust version is 1.56.1.

Usage

Pass an IP address and a sender identity (an email address or a domain name) to spftrace.

Use the unspecified IP address 0.0.0.0 or :: to display the full evaluation tree of some SPF-enabled domain.

spftrace 0.0.0.0 gluet.ch

gluet.ch │ "v=spf1 mx -all" ├── mx → gluet.ch (lookups: 1/10, nested: 1/10) │ └── mail.gluet.ch │ └── 185.46.57.247 │ not-match └── all match result=fail fail

For details, refer to the included man page spftrace(1). (You can view the man page without installing: man ./spftrace.1)

Development

Unit tests are in separate module tests. Specify a test name and pass the --show-output test binary option to run and visually check some test. For example:

cargo test ptr -- --show-output

Licence

Copyright © 2022 David Bürgin

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.