
🦀 Rust向けステルスHTTPクライアント。検出されないリクエストのために、実際のブラウザのTLSフィンガープリントを模倣します。高速で型安全、精密なネットワーキング向けに構築されています。
. Rust向けの先進的なステルスHTTPクライアント。
プライバシーを重視する開発者のために、ネットワークフィンガープリントを完全に制御できるように設計されています。
ブラウザのように見えます。ブラウザのように動作します。Rustで書かれています。
bogdanfinn/tls-client をベースに構築 - 世界中のセキュリティ専門家が信頼する、業界をリードするTLSフィンガープリンティングライブラリです。FFIバインディングを通じて、bogdanfinnの実戦で検証された共有ライブラリ(.dll/.so/.dylib)を使用する理由は以下のとおりです:
RustTLSXは、この実証済みのテクノロジーをRustにもたらし、Pythonの代替手段より6倍高速な、型安全で使いやすいAPIを提供します。
現代のWebアプリケーションは、HTTPリクエストのあらゆる側面を分析します。ヘッダーやクッキーだけでなく、TLSハンドシェイクの深層にある暗号署名までも分析します。標準的なRust HTTPクライアント(reqwest、hyper、ureq)は、自動化されたトラフィックを即座に識別する、簡単に検出可能なパターンを生成します。
RustTLSXは以下を提供することでこの問題を解決します:
tls-clientのリリース から、お使いのプラットフォームに必要なTLSクライアントライブラリをダウンロードしてください:
tls-client-windows-64-1.3.3.dlltls-client-linux-ubuntu-amd64-1.3.3.sotls-client-darwin-amd64-1.3.3.dylibライブラリファイルをプロジェクトのルート、システムライブラリパス(/usr/local/lib/)に配置するか、PATH経由でアクセスできるようにしてください。
Cargo.toml にRustTLSXを追加します:
[dependencies]
rust-tlsx = "0.1"
use rust_tlsx::{TlsClient, BrowserProfile};
fn main() -> anyhow::Result<()> {
let client = TlsClient::new(BrowserProfile::Firefox120)
.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0")
.timeout(30);
let response = client.get("https://example.com")?;
println!("Status: {}", response.status);
println!("Body: {}", response.body);
Ok(())
}
RustTLSXは、主要ブラウザにわたる30以上のブラウザプロファイルをサポートしています:
// Chrome versions
BrowserProfile::Chrome103
BrowserProfile::Chrome107
BrowserProfile::Chrome109
BrowserProfile::Chrome120
// Firefox versions
BrowserProfile::Firefox102
BrowserProfile::Firefox105
BrowserProfile::Firefox108
BrowserProfile::Firefox120
// Safari versions
BrowserProfile::Safari15_6_1
BrowserProfile::Safari16_0
BrowserProfile::SafariIos16_0
// Opera and others
BrowserProfile::Opera89
BrowserProfile::Opera90
let client = TlsClient::new(BrowserProfile::Chrome109)
.header("Accept", "application/json")
.header("Accept-Language", "en-US,en;q=0.9")
.cookie("session", "abc123")
.cookie("token", "xyz789");
let response = client.get("https://api.example.com")?;
let body = r#"{"username": "user", "password": "pass"}"#;
let response = client.post("https://example.com/login", Some(body.to_string()))?;
let client = TlsClient::new(BrowserProfile::Firefox120)
.timeout(60); // seconds
let response = client.get("https://slow-api.example.com")?;
RustTLSXは、車輪の再発明ではなく、実証済みの優秀さという基盤の上に構築されています。FFIを通じてbogdanfinnのコンパイル済みライブラリ(.dll/.so/.dylib)を使用する理由は以下のとおりです:
研究への投資:Bogdanfinnは、ブラウザのTLS動作のリバースエンジニアリングに何千時間もの時間を投資してきました。この研究を再現するには何年もかかり、おそらく劣った結果しか得られないでしょう。
実戦で検証された信頼性:これらのライブラリは、世界中の主要なセキュリティ企業、プライバシーツール、研究機関で使用されています。あらゆる主要な保護システムに対してテストされてきました。
継続的な進化:ブラウザのフィンガープリントは常に変化しています。bogdanfinnのライブラリは、新しいブラウザバージョンや保護システムの更新に合わせて定期的に更新されます。
パフォーマンス最適化:ネイティブのC/Go実装は、速度とメモリ効率のために高度に最適化されており、純粋なRust実装では達成できないパフォーマンスを提供します。
ランタイム動的ロード:ライブラリはFFIを使用してオンデマンドでロードされ、パフォーマンスを維持しながら静的リンクの複雑さを排除します。
メモリ管理:Rustの所有権モデルにより、ネイティブライブラリとの安全な対話が保証され、C/C++実装にありがちなメモリリークやuse-after-freeバグを防止します。
エラー処理:Resultベースの包括的なエラー処理により、型安全性を維持しながら詳細な診断情報を提供します。
接続管理:ブラウザに正確に一致する動作パターンによる、TLS接続のインテリジェントなプーリングと再利用。
基盤となるライブラリは、ブラウザのTLS動作のあらゆる側面を管理します:
use rust_tlsx::{TlsClient, BrowserProfile};
fn main() -> anyhow::Result<()> {
let client = TlsClient::new(BrowserProfile::Chrome109);
let response = client.get("https://httpbin.org/get")?;
println!("Status: {}", response.status);
println!("Body: {}", response.body);
Ok(())
}
use rust_tlsx::{TlsClient, BrowserProfile};
fn main() -> anyhow::Result<()> {
let client = TlsClient::new(BrowserProfile::Firefox120);
let response = client.get("https://tls.peet.ws/api/all")?;
println!("TLS Fingerprint Analysis:\n{}", response.body);
Ok(())
}
use rust_tlsx::{TlsClient, BrowserProfile};
fn main() -> anyhow::Result<()> {
let client = TlsClient::new(BrowserProfile::Chrome109)
.header("Authorization", "Bearer YOUR_TOKEN")
.header("Content-Type", "application/json");
let response = client.get("https://api.example.com/data")?;
match response.status {
200 => println!("Success: {}", response.body),
401 => eprintln!("Authentication failed"),
_ => eprintln!("Request failed with status {}: {}", response.status, response.body),
}
Ok(())
}
use rust_tlsx::{TlsClient, BrowserProfile};
fn main() -> anyhow::Result<()> {
// Create a client that appears as a real Firefox browser
let client = TlsClient::new(BrowserProfile::Firefox120)
.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0")
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
.header("Accept-Language", "en-US,en;q=0.5")
.header("Accept-Encoding", "gzip, deflate, br")
.header("DNT", "1") // Privacy-focused: Do Not Track
.timeout(30);
// Include session cookies for authenticated requests
let client = client.cookie("session_id", "your_session_token");
let response = client.get("https://example-site.com/data")?;
match response.status {
200 => println!("Data retrieved successfully with browser-like privacy"),
403 => println!("Authentication required - check session cookies"),
_ => println!("Response: {}", response.status),
}
Ok(())
}
use rust_tlsx::{TlsClient, BrowserProfile};
use std::collections::HashMap;
fn main() -> anyhow::Result<()> {
// Simulate a specific browser environment
let mut headers = HashMap::new();
headers.insert("User-Agent".to_string(),
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36".to_string());
headers.insert("Sec-Fetch-Site".to_string(), "same-origin".to_string());
headers.insert("Sec-Fetch-Mode".to_string(), "navigate".to_string());
headers.insert("Sec-Fetch-Dest".to_string(), "document".to_string());
let client = TlsClient::new(BrowserProfile::Chrome120)
.headers(headers)
.timeout(45);
// Make request that's indistinguishable from real browser
let response = client.get("https://api.example.com/sensitive-data")?;
println!("Retrieved data with perfect browser mimicry");
println!("Protocol used: {}", response.used_protocol);
Ok(())
}
RustTLSXは、すべての標準的なRust HTTPクライアントと比較して、優れたパフォーマンスとプライバシーを提供します:
ゼロコピー操作:最適化されたC/Goライブラリへの直接FFI呼び出しにより、純粋なRust実装を悩ませる不要なデータコピーを排除します。
接続プーリング:ブラウザに正確なキープアライブ動作によるTLS接続のインテリジェントな再利用で、ハンドシェイクのオーバーヘッドを最大80%削減します。
メモリ効率:Rustの所有権モデルと最適化されたネイティブライブラリの組み合わせにより、同等のPythonソリューションよりメモリ使用量が40%削減されます。
同時実行パフォーマンス:適切な接続多重化を備えたネイティブasyncサポートが、CPUコア数に応じて線形にスケーリングします。
Pythonのtls-clientバインディングとの比較:
Goのtls-clientとの比較:
Node.jsソリューションとの比較:
tls-clientのリリース から適切なバイナリをダウンロードしてください:
tls-client-windows-64-1.3.3.dlltls-client-linux-ubuntu-amd64-1.3.3.sotls-client-darwin-amd64-1.3.3.dylibライブラリファイルをプロジェクトのルート、システムライブラリディレクトリに配置するか、PATH経由でアクセスできるようにしてください。
[dependencies]
rust-tlsx = "0.1"
anyhow = "1.0"
use rust_tlsx::{TlsClient, BrowserProfile};
fn main() -> anyhow::Result<()> {
let client = TlsClient::new(BrowserProfile::Firefox120);
let response = client.get("https://example.com")?;
println!("Status: {}", response.status);
Ok(())
}
ブラウザのようなTLSフィンガープリントでHTTPリクエストを行うためのメインクライアントインターフェース。
impl TlsClient {
pub fn new(profile: BrowserProfile) -> Self
pub fn header(self, key: &str, value: &str) -> Self
pub fn headers(self, headers: HashMap<String, String>) -> Self
pub fn cookie(self, name: &str, value: &str) -> Self
pub fn cookies(self, cookies: Vec<CookieInput>) -> Self
pub fn timeout(self, seconds: i32) -> Self
pub fn get(&self, url: &str) -> Result<Response>
pub fn post(&self, url: &str, body: Option<String>) -> Result<Response>
}
利用可能なブラウザフィンガープリントプロファイルの列挙:
pub enum BrowserProfile {
// Chrome versions
Chrome103, Chrome104, Chrome105, Chrome106,
Chrome107, Chrome108, Chrome109, Chrome120,
// Firefox versions
Firefox102, Firefox104, Firefox105, Firefox106,
Firefox108, Firefox120,
// Safari versions
Safari15_6_1, Safari16_0,
SafariIpad15_6, SafariIos15_5, SafariIos15_6, SafariIos16_0,
// Opera versions
Opera89, Opera90, Opera91,
}
クライアントメソッドによって返されるHTTPレスポンス構造体:
pub struct Response {
pub status: i32, // HTTP status code
pub used_protocol: String, // Protocol used ("h2" or "http/1.1")
pub body: String, // Response body content
pub headers: HashMap<String, Vec<String>>, // Response headers
pub cookies: HashMap<String, String>, // Set-Cookie values
}
エラー:Failed to load library: cannot find tls-client-*.dll
解決策:
/usr/local/lib/)本物のTLSフィンガープリントを使用していても、追加の要素が必要になる場合があります:
必要なコンポーネント:
完全な例:
let client = TlsClient::new(BrowserProfile::Firefox120)
.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0")
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
.header("Accept-Language", "en-US,en;q=0.5")
.header("Accept-Encoding", "gzip, deflate, br")
.header("Connection", "keep-alive")
.header("Upgrade-Insecure-Requests", "1");
git clone https://github.com/yourusername/rust-tlsx
cd rust-tlsx
# Download required TLS library
wget https://github.com/bogdanfinn/tls-client/releases/download/v1.3.3/tls-client-windows-64-1.3.3.dll
# Build the project
cargo build --release
# Run tests
cargo test
cargo run --example simple_request
貢献を歓迎します! ガイドラインについては CONTRIBUTING.md を参照してください。
改善の余地がある分野:
以下のいずれかのライセンスに基づいてライセンスされています:
基盤となるTLSクライアントライブラリは、BSD-4-Clauseライセンスを使用しています。
| ライブラリ | TLSフィンガープリント | パフォーマンス | プライバシーレベル | メモリ使用量 |
|---|
reqwest + rustls | 検出可能なRustシグネチャ | ベースライン | 低 | 高 |
reqwest + native-tls | システムTLS(検出可能) | ベースライン | 低 | 高 |
hyper + hyper-tls | 汎用HTTP/2 | 高速 | 低 | 中 |
ureq | 基本的なTLS 1.2/1.3 | 遅い | 低 | 低 |
rust-tlsx | 完璧なブラウザ模倣 | 6倍高速 | 最大 | 最適化 |