inherface
This project is used to get a linux system's network interfaces.
It is a fork of network-interface, a project by Esteban Borai and others.
We'll talk about why you might choose inherface vs network-interface below.
Usage
This project provides both a binary and a library.
Binary
Install with cargo install inherface then run inherface. At this moment, there are no CLI arguments to pass.
Library
Add to your project with cargo add inherface.
All features except serde are enabled by default. Adjust as necessary.
Here is an example to get a specific interface by name:
use get_interfaces;
Or iterating through all interfaces:
use get_interfaces;
Would output something like:
NetworkInterface { name: "eth0", index: 2, v4_addr: [V4IfAddr { ip: 192.168.1.123, broadcast: Some(192.168.1.255), netmask: Some(255.255.255.0) }], v6_addr: [V6IfAddr { ip: <redacted>, broadcast: None, netmask: Some(ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff) }, V6IfAddr { ip: <redacted>, broadcast: None, netmask: Some(ffff:ffff:ffff:ffff::) }, V6IfAddr { ip: <redacted>, broadcast: None, netmask: Some(ffff:ffff:ffff:ffff::) }], mac_addr: Some(MacAddress { bytes: [<redacted>] }) }
NetworkInterface { name: "lo", index: 1, v4_addr: [V4IfAddr { ip: 127.0.0.1, broadcast: Some(127.255.255.255), netmask: Some(255.0.0.0) }], v6_addr: [V6IfAddr { ip: ::1, broadcast: None, netmask: Some(ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff) }], mac_addr: Some(MacAddress { bytes: [0, 0, 0, 0, 0, 0] }) }
NetworkInterface { name: "wlan0", index: 3, v4_addr: [], v6_addr: [], mac_addr: Some(MacAddress { bytes: [<redacted>] }) }
Comparison
At the time of writing...
Pros of using inherface:
- Improved performance and added benchmarking.
- Reduced overall code and added features to allow further reduction.
- Fixed getting the ipv4 broadcast.
- Added binary (see above).
- Open license (GNU LGPL).
- Hosted on open git forge (Codeberg).
- Get interface by name.
- Latest 2024 edition.
Cons of using inherface (consider using network-interface):
- Removed support for all systems except linux.
- Lack of CI/CD.
License
Distributed under the terms of the GNU Library General Public License (Version 2.0). See the LICENSE file for more information.