5个版本 (3个破坏性版本)
新 0.4.0 | 2024年8月24日 |
---|---|
0.3.0 | 2024年7月5日 |
0.2.1 | 2024年3月15日 |
0.2.0 | 2024年3月15日 |
0.1.0 | 2023年12月3日 |
#992 in 网络编程
每月87次下载
在gosling中使用
200KB
4K SLoC
托尔接口
面向开发者的crate,提供连接到Tor网络的功能以及与Tor特定加密类型交互的功能。
此crate的目的不是为了成为一个通用的Tor控制器,也不是旨在公开底层Tor实现的所有功能。此crate本身也不实现任何Tor网络功能,而是封装了底层实现。
概述
tor-interface
crate提供了带有3个具体实现的TorProvider
trait
- ArtiClientTorClient:围绕
arti-client
crate的实验性包装器;使用arti-client-tor-provider
功能标志启用。 - LegacyTorClient:围绕一个所有者或系统提供的旧版c-tor守护进程(即'小tor')的包装器,具有一些基本配置选项;使用
legacy-tor-provider
功能标志启用。 - MockTorClient:一个进程内的模拟实现,不会在本地主机之外建立任何实际连接;使用
mock-tor-provider
功能标志启用。
TorProvider
trait定义了连接到各种类型的目标地址(IP、域名和洋葱服务)以及创建洋葱服务的方法。
⚠警告⚠
arti-client-tor-provider
功能是实验性的,并未完全实现。它还依赖于仍在积极开发的arti-client
crate,并且目前还不适合生产使用。
用法
以下代码片段创建了一个LegacyTorClient
,它启动了一个捆绑的tor守护进程,引导,并尝试连接到www.example.com。
# use std::str::FromStr;
# use std::net::TcpStream;
# use tor_interface::legacy_tor_client::{LegacyTorClient, LegacyTorClientConfig};
# use tor_interface::tor_provider::{OnionStream, TargetAddr, TorEvent, TorProvider};
# return;
// construct legacy tor client config
let tor_path = std::path::PathBuf::from_str("/usr/bin/tor").unwrap();
let mut data_path = std::env::temp_dir();
data_path.push("tor_data");
let tor_config = LegacyTorClientConfig::BundledTor {
tor_bin_path: tor_path,
data_directory: data_path,
proxy_settings: None,
allowed_ports: None,
pluggable_transports: None,
bridge_lines: None,
};
// create client from config
let mut tor_client = LegacyTorClient::new(tor_config).unwrap();
// bootstrap tor
let mut bootstrap_complete = false;
while !bootstrap_complete {
for event in tor_client.update().unwrap().iter() {
match event {
TorEvent::BootstrapComplete => {
bootstrap_complete = true;
},
_ => {},
}
}
}
// connect to example.com
let target_addr = TargetAddr::from_str("www.example.com:80").unwrap();
let mut stream: OnionStream = tor_client.connect(target_addr, None).unwrap();
// and convert to a std::net::TcpStream
let stream: TcpStream = stream.into();
依赖关系
~15–33MB
~501K SLoC