19 个版本
0.6.1 | 2023 年 10 月 10 日 |
---|---|
0.5.5 | 2023 年 2 月 21 日 |
0.5.4 | 2022 年 8 月 30 日 |
0.5.3 | 2021 年 8 月 30 日 |
0.3.0 | 2017 年 6 月 2 日 |
#69 in 网络编程
25,185 每月下载量
在 12 个包中使用 (11 直接使用)
105KB
2.5K SLoC
TUN 接口

此包允许创建和使用 TUN 接口,目标是使其跨平台。
使用方法
首先,将以下内容添加到您的 Cargo.toml
[dependencies]
tun = "0.6.1"
然后,将以下内容添加到您的包根目录
extern crate tun;
如果您想使用 mio/tokio 与 TUN 接口,需要启用 async
功能
[dependencies]
tun = { version = "0.6.1", features = ["async"] }
示例
以下示例创建并配置了一个 TUN 接口,并从中开始读取数据包。
use std::io::Read;
extern crate tun;
fn main() {
let mut config = tun::Configuration::default();
config.address((10, 0, 0, 1))
.netmask((255, 255, 255, 0))
.up();
#[cfg(target_os = "linux")]
config.platform(|config| {
config.packet_information(true);
});
let mut dev = tun::create(&config).unwrap();
let mut buf = [0; 4096];
loop {
let amount = dev.read(&mut buf).unwrap();
println!("{:?}", &buf[0 .. amount]);
}
}
平台
并非每个平台都受支持。
Linux
您需要加载 tun
模块,并且创建接口需要 root 权限。
macOS
它正常工作,但您需要手动设置路由。
iOS
您可以将 TUN 设备的文件描述符传递给 rust-tun
以创建接口。
以下是在 iOS 上创建 TUN 设备并传递 fd
到 rust-tun
的示例
// Swift
class PacketTunnelProvider: NEPacketTunnelProvider {
override func startTunnel(options: [String : NSObject]?, completionHandler: @escaping (Error?) -> Void) {
let tunnelNetworkSettings = createTunnelSettings() // Configure TUN address, DNS, mtu, routing...
setTunnelNetworkSettings(tunnelNetworkSettings) { [weak self] error in
let tunFd = self?.packetFlow.value(forKeyPath: "socket.fileDescriptor") as! Int32
DispatchQueue.global(qos: .default).async {
start_tun(tunFd)
}
completionHandler(nil)
}
}
}
#[no_mangle]
pub extern "C" fn start_tun(fd: std::os::raw::c_int) {
let mut rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async {
let mut cfg = tun::Configuration::default();
cfg.raw_fd(fd);
let mut tun = tun::create_as_async(&cfg).unwrap();
let mut framed = tun.into_framed();
while let Some(packet) = framed.next().await {
...
}
});
}
Windows
您需要将与您的架构匹配的 wintun.dll 文件复制到与您的可执行文件相同的目录,并以管理员身份运行程序。
依赖项
~0.3–30MB
~392K SLoC