4 releases (2 breaking)
new 0.3.0 | Mar 6, 2025 |
---|---|
0.2.1 | Jan 19, 2025 |
0.2.0 | Jan 19, 2025 |
0.1.0 | Jan 12, 2025 |
#1293 in Network programming
2,314 downloads per month
Used in 4 crates
(2 directly)
165KB
3.5K
SLoC
GetIfs
A bunch of cross-platform network tools for fetching interfaces, multicast addresses, local ip addresses, private ip addresses, public ip addresses and etc.
Introduction
A bunch of cross-platform network tools for fetching interfaces, multicast addresses, local ip addresses, private ip addresses, public ip addresses and etc.
Installation
[dependencies]
getifs = "0.3"
Examples
- Fetching all interfaces: examples/interfaces.rs
- Fetching all interface addresses (excluding multicast addrs): examples/addrs.rs
- Fetching all interface multicast addresses: exampels/multicast_addrs.rs
- Fetching gateway addresses: examples/gateway.rs
- Fetching local ip addresses: examples/local_ip_addrs.rs
- Fetching ip addresses by RFC: examples/filter_by_rfc.rs
Details
OS | Approach |
---|---|
Linux (no libc ) |
socket(AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, NETLINK_ROUTE) |
BSD-like | sysctl |
Windows | GetAdaptersAddresses |
Why a new network interfaces crate?
When implementing agnostic-mdns
(an mDNS crate), I found that Rust was missing a crate to help play with network interfaces and addresses.
All of current network interfaces crates do not support fetching MTU
and multicast addresses, and almost all of them are using libc::getifaddrs
. This crate
tries to avoid unneeded allocation and use more underlying method to achieve the same functionalities.
Hence, getifs
is here, which contain a bunch of cross-platform network tools for fetching interfaces, multicast addresses, local ip addresses, private ip addresses, public ip addresses and etc.
Roadmap
- Support fetching routing tables (0.4.0)
Benchmarks
Ubuntu 22.04 ARM64 (Parallel Desktop, 1 CPU, 8GB memory)
MacOS (Apple M1 Max, 32GB)
Sister crates
iprobe
: Probe if the host system supports IPv4, IPv6 and IPv4-mapped-IPv6.iprfc
: Known RFCs for IP addresses.
Pedigree
- The code in this crate is inspired by Golang's
interface.go
and HashiCorp's go-sockaddr.
License
getifs
is under the terms of both the MIT license and the
Apache License (Version 2.0).
See LICENSE-APACHE, LICENSE-MIT for details.
Copyright (c) 2025 Al Liu.
Dependencies
~3–14MB
~207K SLoC