3个不稳定版本

0.2.0 2024年4月7日
0.1.1 2023年11月1日
0.1.0 2023年8月5日

#8 in #ports


用于 upnp-daemon

WTFPL 许可证

18KB
162

easy-upnp

badge github badge crates.io badge docs.rs badge license

轻松打开和关闭UPnP端口。

这是一个围绕IGD的简约封装,用于通过UPnP打开和关闭网络端口。主要这个库用于CLI应用upnp-daemon,但也可以用作其他仅希望以最小配置打开和关闭端口的crate的库。

示例

以下是一个实际操作示例,演示其用法。它将添加一些端口,然后立即删除它们。

use std::error::Error;
use log::error;
use easy_upnp::{add_ports, delete_ports, Ipv4Cidr, PortMappingProtocol, UpnpConfig};

fn get_configs() -> Result<[UpnpConfig; 3], Box<dyn Error>> {
    let config_no_address = UpnpConfig {
        address: None,
        port: 80,
        protocol: PortMappingProtocol::TCP,
        duration: 3600,
        comment: "Webserver".to_string(),
    };

    let config_specific_address = UpnpConfig {
        address: Some(Ipv4Cidr::from_str("192.168.0.10/24")?),
        port: 8080,
        protocol: PortMappingProtocol::TCP,
        duration: 3600,
        comment: "Webserver alternative".to_string(),
    };

    let config_address_range = UpnpConfig {
        address: Some(Ipv4Cidr::from_str("192.168.0")?),
        port: 8081,
        protocol: PortMappingProtocol::TCP,
        duration: 3600,
        comment: "Webserver second alternative".to_string(),
    };

    Ok([
        config_no_address,
        config_specific_address,
        config_address_range,
    ])
}

fn main() -> Result<(), Box<dyn Error>> {
    for result in add_ports(get_configs()?) {
        if let Err(err) = result {
            error!("{}", err);
        }
    }

    for result in delete_ports(get_configs()?) {
        if let Err(err) = result {
            error!("{}", err);
        }
    }

    Ok(())
}

依赖项

~5.5–7.5MB
~165K SLoC