| Crates.io | natpmp |
| lib.rs | natpmp |
| version | 0.5.0 |
| created_at | 2018-11-25 14:12:40.150898+00 |
| updated_at | 2024-11-06 14:20:08.160695+00 |
| description | NAT-PMP client library |
| homepage | https://github.com/fengyc/natpmp |
| repository | https://github.com/fengyc/natpmp |
| max_upload_size | |
| id | 98599 |
| size | 78,203 |
NAT-PMP client library in rust, a rust implementation of the c library libnatpmp(https://github.com/miniupnp/libnatpmp).
Note: src/getgateway.h and src/getgateway.c are from https://github.com/miniupnp/libnatpmp .
Version 0.2.x supports rust 2018 edition.
Version 0.3.x+ supports tokio and async-std.
Create a natpmp object with system default gateway:
use natpmp::*
let n = Natpmp::new()?
Or a specified gataway:
use std::str::FromStr;
use natpmp::*;
let n = Natpmp::new("192.168.0.1").parse.unwrap())?
To determine the external address, send a public address request:
n.send_public_address_request()?;
To add a port mapping, send a port mapping request:
n.send_port_mapping_request(Protocol::UDP, 4020, 4020, 30)?;
And then read response after a few milliseconds:
use std::thread;
use std::time::Duration;
thread::sleep(Duration::from_millis(250));
let response = n.read_response_or_retry()?;
Check response type and and result:
match response {
Response::Gateway(gr) => {}
Response::UDP(ur) => {}
Response::TCP(tr) => {}
}
Enable feature tokio or async-std in Cargo.toml (default feature tokio).
[dependencies]
natpmp = { version = "0.3", features = ["tokio"] }
Or
[dependencies]
natpmp = { version = "0.3", features = ["async-std"] }
MIT