/arp-toolkit-rust

Toolkit for ARP and RARP using Raw sockets in Rust

Primary LanguageRustMIT LicenseMIT

arp-toolkit Build crates.io

Toolkit for (R)ARP , the (Reverse) Address Resolution Protocol.

Supports simplified sending and receiving of (R)ARP requests/responses using an abstracted Client. Also allows easy manipulation and building of (R)ARP packets.

Features:

  • Sending and receiving ARP/RARP messages
  • Abstracted ARP client with simple access to most common ARP/RARP use cases
  • Advanced API, allowing for arbitrary construction and manipulation of ARP/RARP packets
  • Sync (blocking) and async IO

Build

To build it, use

cargo build

Note: only the async-example is built per default. To build the sync-example, change to the directory and run cargo build. This is because sync and async can not be used in the same crate simultaneously.

Usage

examples/sync-example shows high-level usage of the class ArpClient using blocking IO. For example, it illustrates how to get the MAC address for the corresponding IP and vice versa with a single function call. async-example shows the same, but with async IO.

It is also possible to directly send, receive and manipulate (R)ARP packages. To see how this works, take a look at the both of the examples and their containing method resolve_advanced.

To use blocking IO instead of async IO, activate the feature sync in your Cargo.toml like this:

[dependencies]
arp-toolkit = {version = x.x.x, features = ["sync"]}

Important note: As this library uses Raw sockets, either set the CAP_NET_RAW capability or run your program with sudo. (not recommended)