#ip-address #network-interface #local #macos-windows #socket-address #ip #sockets

local-ip-address

Retrieve system's local IP address and Network Interfaces/Adapters on Linux, macOS and Windows

24 releases

0.6.3 Sep 17, 2024
0.6.1 Feb 25, 2024
0.5.6 Sep 27, 2023
0.5.4 Jul 27, 2023
0.4.2 Jul 14, 2021

#8 in Network programming

Download history 89990/week @ 2024-12-01 90596/week @ 2024-12-08 87874/week @ 2024-12-15 43761/week @ 2024-12-22 51301/week @ 2024-12-29 93962/week @ 2025-01-05 122882/week @ 2025-01-12 99030/week @ 2025-01-19 103341/week @ 2025-01-26 112541/week @ 2025-02-02 119111/week @ 2025-02-09 105963/week @ 2025-02-16 123878/week @ 2025-02-23 125345/week @ 2025-03-02 125913/week @ 2025-03-09 123150/week @ 2025-03-16

507,563 downloads per month
Used in 197 crates (133 directly)

MIT/Apache

55KB
1K SLoC

local-ip-address

Retrieve system's local IP address and Network Interfaces/Adapters on Linux, Windows, and macOS (and other BSD-based systems).

Crates.io Documentation Build Clippy Formatter

Usage

Get the local IP address of your system by executing the local_ip function:

use local_ip_address::local_ip;

fn main() {
    let my_local_ip = local_ip().unwrap();

    println!("This is my local IP address: {:?}", my_local_ip);
}

Retrieve all the available network interfaces from both, the AF_INET and the AF_INET6 family by executing the list_afinet_netifas function:

use local_ip_address::list_afinet_netifas;

fn main() {
    let network_interfaces = list_afinet_netifas().unwrap();

    for (name, ip) in network_interfaces.iter() {
        println!("{}:\t{:?}", name, ip);
    }
}

Underlying approach on retrieving network interfaces or the local IP address may differ based on the running operative system.

OS Approach
Linux Establishes a Netlink socket interchange to retrieve network interfaces
BSD-based Uses of getifaddrs to retrieve network interfaces
Windows Consumes Win32 API's to retrieve the network adapters table

Operating System Support

Current supported platforms include:

  • Linux (requires at least v0.1.0);
  • macOS (requires at least v0.1.0);
  • Windows (requires at least v0.3.0);
  • Other BSD-based (requires at least v0.5.0); including:
    • FreeBSD
    • OpenBSD
    • NetBSD
    • DragonFly

Please note that we only test the BSD implementation of this on macOS and FreeBSD, under the assumption that other BSD-based systems will behave similarly. If you have any complications using this library on the other BSD-based, please create an issue.

Release

In order to create a release you must push a Git tag as follows

git tag -a <version> -m <message>

Example

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:

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)

Dependencies

~0.2–8.5MB
~71K SLoC