#cross-platform #tun #networking

tunio

用于创建和管理 TUN/TAP 接口的 crate,支持异步操作。与 netconfig crate 配合使用效果最佳。

6 个版本

0.3.0 2022 年 6 月 26 日
0.2.0 2022 年 5 月 31 日
0.1.3 2022 年 5 月 11 日

693操作系统 中排名

每月 38 次下载

MIT 许可证

45KB
1K SLoC

Tunio

Crates.io docs.rs

在跨平台和 Rust 风格中创建 TUN/TAP 接口!

特性 ⭐

  • Tokio 支持(可选)。
  • TUN/TAP 支持。
  • 可扩展架构,便于以后添加其他平台。

简短示例 📜

use std::io::{Read, Write};
use tunio::traits::{DriverT, InterfaceT};
use tunio::{DefaultDriver, DefaultInterface};

fn main() {
    // DefaultDriver is an alias for a supported driver for current platform.
    // It may be not optimal for your needs (for example, it can lack support of TAP),
    // but it will work in some cases. If you need another driver, then import and use it instead.
    let mut driver = DefaultDriver::new().unwrap();
    // Preparing configuration for new interface. We use `Builder` pattern for this.
    let if_config = DefaultDriver::if_config_builder()
        .name("iface1".to_string())
        .build()
        .unwrap();

    // Then, we create the interface using config and start it immediately.
    let mut interface = DefaultInterface::new_up(&mut driver, if_config).unwrap();

    // The interface is created and running.

    // Write to interface using Write trait
    let buf = [0u8; 4096];
    let _ = interface.write(&buf);

    // Read from interface using Read trait
    let mut mut_buf = [0u8; 4096];
    let _ = interface.read(&mut mut_buf);
}

支持的平台 🖥️

  • Windows,仅支持 TUN(使用 Wintun 驱动)。
    • Wintun 驱动需要在应用程序文件夹中预构建 DLL。请参阅 Wintun 文档以获取更多详细信息。
  • Linux

计划支持 macOS 的 utun 和 feth 驱动。欢迎提交 PR,我们总是非常感激 😊

  • netconfig:用于收集和更改网络接口配置的高级抽象。

依赖项

~3–46MB
~674K SLoC