1 个不稳定版本

0.5.0 2024 年 8 月 3 日

网络编程 中排名 #698

Download history 113/week @ 2024-07-29 17/week @ 2024-08-05

每月下载量 130

MIT 许可证

57KB
1K SLoC

Rust 620 SLoC // 0.0% comments C 418 SLoC // 0.2% comments

natpmp-ng

这是对 natpmp 的维护版本,用于 Ten Forward

Rust 语言实现的 NAT-PMP 客户端库,是 c 库 libnatpmp(https://github.com/miniupnp/libnatpmp) 的 Rust 版本。

注意: src/getgateway.hsrc/getgateway.c 来自 https://github.com/miniupnp/libnatpmp .

版本

版本 0.2.x 支持 Rust 2018 版本。

版本 0.3.x+ 支持 tokio 和 async-std。

示例

使用系统默认网关创建 natpmp 对象

use natpmp_ng::*

let n = Natpmp::new()?

或指定网关

use std::str::FromStr;
use natpmp_ng::*;

let n = Natpmp::new("192.168.0.1").parse.unwrap())?

要确定外部地址,发送公共地址请求

n.send_public_address_request()?;

要添加端口映射,发送端口映射请求

n.send_port_mapping_request(Protocol::UDP, 4020, 4020, 30)?;

然后几毫秒后读取响应

use std::thread;
use std::time::Duration;

thread::sleep(Duration::from_millis(250));
let response = n.read_response_or_retry()?;

检查响应类型和结果

match response {
    Response::Gateway(gr) => {}
    Response::UDP(ur) => {}
    Response::TCP(tr) => {}
}

异步

在 Cargo.toml 中启用功能 tokioasync-std (默认功能 tokio)。

[dependencies]
natpmp_ng = { version = "0.5", features = ["tokio"] }

[dependencies]
natpmp_ng = { version = "0.5", features = ["async-std"] }

许可证

MIT

依赖项

~3–13MB
~162K SLoC