13 个版本

0.4.0 2022年11月26日
0.3.3 2022年11月26日
0.3.2 2021年9月3日
0.3.1 2021年5月21日
0.1.15 2018年11月29日

#850网络编程

Download history 160/week @ 2024-03-11 83/week @ 2024-03-18 92/week @ 2024-03-25 133/week @ 2024-04-01 89/week @ 2024-04-08 100/week @ 2024-04-15 111/week @ 2024-04-22 69/week @ 2024-04-29 62/week @ 2024-05-06 74/week @ 2024-05-13 70/week @ 2024-05-20 72/week @ 2024-05-27 58/week @ 2024-06-03 84/week @ 2024-06-10 99/week @ 2024-06-17 55/week @ 2024-06-24

306 每月下载量
用于 9 个 crate(4 个直接使用)

MIT 许可证

57KB
1K SLoC

Rust 640 SLoC // 0.0% comments C 421 SLoC // 0.2% comments

natpmp

Main Nightly

natpmp 客户端库,Rust 对 c 库 libnatpmp(https://github.com/miniupnp/libnatpmp)的实现。

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

版本

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

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

示例

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

use natpmp::*

let n = Natpmp::new()?

或指定网关

use std::str::FromStr;
use natpmp::*;

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 = { version = "0.3", features = ["tokio"] }

[dependencies]
natpmp = { version = "0.3", features = ["async-std"] }

许可证

MIT

依赖项

~3–16MB
~177K SLoC