oxy-upnp-igd 0.1.2

UPnP Internet Gateway Device (IGD) port mapping library and CLI with smol runtime
Documentation

= oxy-upnp-igd

Minimal UPnP Internet Gateway Device (IGD) port mapping library for Rust.

image:https://img.shields.io/crates/v/oxy-upnp-igd[crates.io,link="https://crates.io/crates/oxy-upnp-igd"] image:https://docs.rs/oxy-upnp-igd/badge.svg[Documentation,link="https://docs.rs/oxy-upnp-igd"] image:https://img.shields.io/badge/License-AGPL--3.0--only-blue.svg[License: AGPL-3.0,link="https://opensource.org/licenses/AGPL-3.0"]

== Features

  • UPnP gateway discovery via SSDP (discovers ALL available gateways)
  • Port mapping (Add/Delete) for TCP and UDP
  • Automatic port mapping renewal
  • External IP address retrieval
  • Smol runtime compatible
  • Minimal dependencies

== CLI Tool

This package includes the oxyupnpc command-line tool for UPnP port management.

=== Installation

[source,bash]

cargo install oxy-upnp-igd

Or build from source:

[source,bash]

cargo build --release --bin oxyupnpc

The compiled binary will be at target/release/oxyupnpc.

=== Usage

[source,bash]

Get external IP address

oxyupnpc -E

List all port mappings

oxyupnpc -L

Add a port mapping (external_port 8080 -> internal_port 8080 TCP)

oxyupnpc -r 8080 8080 TCP

Add a port mapping with auto-selected external port

oxyupnpc -R 8080 TCP

Delete a port mapping

oxyupnpc -d 8080 TCP

Show help

oxyupnpc -h

== Quick Start


[source,rust] use oxy_upnp_igd::discover_gateways; use std::time::Duration;

fn main() -> Result<(), Box> { smol::block_on(async { let gateways = discover_gateways(Duration::from_secs(3)).await?;

    if let Some(gateway) = gateways.first() {
        let external_ip = gateway.get_external_ip().await?;
        println!("External IP: {}", external_ip);
    }

    Ok(())
})

}


== Documentation

Full API documentation: https://docs.rs/oxy-upnp-igd

== License

AGPL-3.0-only