1 个不稳定发布
0.1.0 | 2023 年 3 月 12 日 |
---|
#5 in #tailscale
35KB
875 行
tsnet - libtailscale 的绑定。
libtailscale 是一个 C 库,它将 Tailscale 嵌入到进程中。tsnet 是一个 Rust 包,它包装 libtailscale 并在顶部公开 Rust-y API。
使用此库将 Tailscale 编译到您的程序中,并在 tailnet 上获得一个 IP 地址,完全是用户空间的。
要求
- Rust 编译器和 Cargo
- Go v1.20 或更高版本
入门
在运行 cargo init
后,将以下行添加到您的 Cargo.toml
文件中
tsnet = "0.1.0"
开发
使用
cargo build
使用
cargo test
使用
cargo run --example echo_server
cargo run --example echo_client
错误
请在此 问题跟踪器 上提交有关此代码或托管服务的任何问题。
许可证
本仓库使用 BSD 3-Clause 许可证,请参阅 LICENSE。
lib.rs
:
将 Tailscale 编译到您的程序中,并在 tailnet 上获得一个完全的用户空间 IP 地址。
从这里,您可以监听其他程序在您的 tailnet 上呼叫您,或直接连接到其他服务。
基于 libtailscale
,它是围绕 Tailscale Go 包的 C 包装器。请参阅 https://pkg.go.dev/tailscale.com/tsnet 以获取 Go 模块文档。
示例
服务器
use std::net::TcpStream;
use tsnet::{ServerBuilder, Network};
fn main() {
let ts = ServerBuilder::new().ephemeral().redirect_log().build().unwrap();
let ln = ts.listen(Network::Tcp, ":1999").unwrap();
for conn in ln {
match conn {
Ok(conn) => handle_client(conn),
Err(err) => panic!("{err}"),
}
}
}
fn handle_client(mut stream: TcpStream) {
// ...
}
客户端
use std::{env, io::Write};
use tsnet::{ServerBuilder, Network};
fn main() {
let srv = ServerBuilder::new()
.ephemeral()
.build()
.unwrap();
let mut conn = srv.connect(Network::Tcp, "echo-server:1999").unwrap();
write!(conn, "This is a test of the Tailscale connection service.\n").unwrap();
}
依赖关系
~2–14MB
~137K SLoC