= 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