https://github.com/leoborai/network-interface
Retrieve system's Network Interfaces on Linux, macOS and Windows on a standardized manner
https://github.com/leoborai/network-interface
multiplatform netifa network
Last synced: 6 months ago
JSON representation
Retrieve system's Network Interfaces on Linux, macOS and Windows on a standardized manner
- Host: GitHub
- URL: https://github.com/leoborai/network-interface
- Owner: LeoBorai
- License: apache-2.0
- Created: 2021-09-24T03:31:26.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2025-03-28T00:50:48.000Z (about 1 year ago)
- Last Synced: 2025-04-04T23:08:35.390Z (about 1 year ago)
- Topics: multiplatform, netifa, network
- Language: Rust
- Homepage: https://crates.io/crates/network-interface
- Size: 76.2 KB
- Stars: 70
- Watchers: 2
- Forks: 30
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
network-interface
Retrieve system's Network Interfaces/Adapters on Android, FreeBSD, Linux, macOS, iOS and Windows
on a standarized manner
[](https://crates.io/crates/network-interface)
[](https://docs.rs/network-interface)



> This crate is under development, feel free to contribute on [GitHub](https://github.com/EstebanBorai/network-interface). API and implementation is subject to change.
The main goal of `network-interface` crate is to retrieve system's Network
Interfaces in a standardized manner.
_standardized manner_ means that every supported platform must expose the same
API and no further changes to the implementation are required to support such
platform.
## Usage
```rust
use network_interface::NetworkInterface;
use network_interface::NetworkInterfaceConfig;
fn main() {
let network_interfaces = NetworkInterface::show().unwrap();
for itf in network_interfaces.iter() {
println!("{:?}", itf);
}
}
```
Output
```
NetworkInterface { name: "lo", addr: Some(V4(V4IfAddr { ip: 127.0.0.1, broadcast: Some(127.0.0.1), netmask: Some(255.0.0.0) })) }
NetworkInterface { name: "wlp1s0", addr: Some(V4(V4IfAddr { ip: 192.168.0.16, broadcast: Some(192.168.0.255), netmask: Some(255.255.255.0) })) }
NetworkInterface { name: "wg0", addr: Some(V4(V4IfAddr { ip: 10.8.0.4, broadcast: Some(10.8.0.4), netmask: Some(255.255.255.0) })) }
NetworkInterface { name: "docker0", addr: Some(V4(V4IfAddr { ip: 172.17.0.1, broadcast: Some(172.17.255.255), netmask: Some(255.255.0.0) })) }
NetworkInterface { name: "lo", addr: Some(V6(V6IfAddr { ip: ::1, broadcast: None, netmask: Some(ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff) })) }
NetworkInterface { name: "wlp1s0", addr: Some(V6(V6IfAddr { ip: , broadcast: None, netmask: Some(ffff:ffff:ffff:ffff::) })) }
NetworkInterface { name: "docker0", addr: Some(V6(V6IfAddr { ip: , broadcast: None, netmask: Some(ffff:ffff:ffff:ffff::) })) }
NetworkInterface { name: "veth9d2904f", addr: Some(V6(V6IfAddr { ip: , broadcast: None, netmask: Some(ffff:ffff:ffff:ffff::) })) }
NetworkInterface { name: "vethcdd79af", addr: Some(V6(V6IfAddr { ip: , broadcast: None, netmask: Some(ffff:ffff:ffff:ffff::) })) }
```
## Release
In order to create a release you must push a Git tag as follows
```sh
git tag -a -m
```
**Example**
```sh
git tag -a v0.1.0 -m "First release"
```
> Tags must follow semver conventions
> Tags must be prefixed with a lowercase `v` letter.
Then push tags as follows:
```sh
git push origin main --follow-tags
```
## Contributing
Every contribution to this project is welcome. Feel free to open a pull request,
an issue or just by starting this project.
## License
Distributed under the terms of both the MIT license and the Apache License (Version 2.0)