2 releases
0.1.1 | Mar 23, 2023 |
---|---|
0.1.0 | Mar 4, 2023 |
#5 in #libpcap
760KB
16K
SLoC
Rscap
Rscap - Rust packet capture and manipulation utilities
Rscap is a multi-purpose library for network packet capture/transmission and packet building. Its aims are twofold:
- To provide Rust-native platform tools for packet capture and transmission (comparable to
libpcap
, but written from the ground up in Rust) - To expose a robust and ergonomic API for building packets and accessing/modifying packet data fields in various network protocols (like
scapy
, but with strong typing and significantly improved performance)
Features
- Platform-independent interface for packet capture/transmission: rscap provides a single unified interface for capturing and transmitting packets across any supported platform. Additionally, the library exposes safe abstractions of platform-specific packet capture tools (such as
AF_PACKET
/PACKET_MMAP
sockets in Linux) to support cases where fine-grained control or platform-specific features are desired. no-std
Compatible: every packet type in thepkts
crate can be used without the standard library, and specialLayerRef
andLayerMut
types can be used to access/modify raw packet bytes without requiringalloc
.- Robust APIs for building/modifying packets: rscap provides simple operations to combine various layers into a single packet, and to index into a different layers of a packet to retrieve or modify fields. Users of
scapy
may find the API surprisingly familiar, especially for layer composition and indexing operations:
use layers::{ip::Ipv4, tcp::Tcp};
let pkt = Ip::new() / Tcp::new();
pkt[Tcp].set_sport(80);
pkt[Tcp].set_dport(12345);
- Packet defragmentation/reordering: In some protocols, packets may be fragmented (such as IPv4) or arrive out-of-order (TCP, SCTP, etc.). Rscap overcomes both of these issues through
Sequence
types that transparently handle defragmentation and reordering.Sequence
types can even be stacked so that application-layer data can easily be reassembled from captured packets. They even work inno-std
environments with or withoutalloc
. - Stateful packet support: Many network protocols are stateful, and interpreting packets from such protocols can be difficult (if not impossible) to accomplish unless information about the protocol session is stored. Rscap provides
Session
types that handle these kinds of packets--Sessions ensure that packets are validated based on the current expected state of the protocol. Just likeSequence
,Session
types are compatible withno-std
environments and do not requirealloc
.
License
The source code of this project is licensed under either the MIT License or the Apache 2.0 License, at your option.
Dependencies
~1.5MB
~35K SLoC