
🦀 عميل HTTP خفي للغة Rust. يحاكي بصمات TLS الحقيقية للمتصفحات لإرسال طلبات غير قابلة للاكتشاف. سريع، وآمن الأنواع، ومصمم للشبكات الدقيقة.
. عميل HTTP متخفٍّ متقدم للغة Rust.
مبني للمطورين المهتمين بالخصوصية الذين يحتاجون تحكمًا كاملًا في بصمة شبكاتهم.
يبدو مثل المتصفح. يتصرف مثل المتصفح. مكتوب بلغة Rust.
مبني على bogdanfinn/tls-client - مكتبة بصمة TLS الرائدة في الصناعة والتي يثق بها خبراء الأمن حول العالم. نستخدم المكتبات المشتركة المجرَّبة من bogdanfinn (.dll/.so/.dylib) عبر روابط FFI للأسباب التالية:
يجلب RustTLSX هذه التقنية المُثبتة إلى Rust مع واجهة برمجة تطبيقات (API) آمنة الأنواع وسهلة الاستخدام، وهي أسرع 6 مرات من بدائل Python.
تحلل تطبيقات الويب الحديثة كل جانب من جوانب طلبات HTTP الخاصة بك - ليس فقط الترويسات وملفات تعريف الارتباط، بل التوقيعات التشفيرية العميقة لمصافحة TLS. تولّد عملاء HTTP القياسية في Rust (reqwest وhyper وureq) أنماطًا يسهل اكتشافها تحدد الحركة الآلية فورًا.
يحل RustTLSX هذه المشكلة عبر تقديم:
حمّل مكتبة عميل TLS المطلوبة لمنصتك من إصدارات 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ضع ملف المكتبة في جذر مشروعك، أو في مسار مكتبات النظام (/usr/local/lib/)، أو تأكد من أنه متاح عبر PATH.
أضف RustTLSX إلى ملف Cargo.toml الخاص بك:
[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 على أساس من التميز المُثبت بدلاً من إعادة اختراع العجلة. نستخدم المكتبات المترجمة من bogdanfinn (.dll/.so/.dylib) عبر FFI للأسباب التالية:
الاستثمار البحثي: استثمر Bogdanfinn آلاف الساعات في الهندسة العكسية لسلوك TLS في المتصفحات. تكرار هذا البحث سيستغرق سنوات ومن المرجح أن يُنتج نتائج أقل جودة.
موثوقية مُختبَرة ميدانيًا: تُستخدم هذه المكتبات من قبل شركات أمنية كبرى وأدوات خصوصية ومؤسسات بحثية حول العالم. لقد خضعت للاختبار ضد جميع أنظمة الحماية الرئيسية.
تطور مستمر: تتغير بصمات المتصفحات باستمرار. تتلقى مكتبات Bogdanfinn تحديثات منتظمة لمواكبة إصدارات المتصفحات الجديدة وتحديثات أنظمة الحماية.
تحسين الأداء: التنفيذ الأصلي بلغة C/Go محسّن بشكل كبير من حيث السرعة وكفاءة الذاكرة، مما يوفر أداءً لا يمكن لتنفيذات Rust الخالصة مضاهاته.
التحميل الديناميكي في وقت التشغيل: تُحمَّل المكتبات عند الحاجة باستخدام FFI، مما يلغي تعقيد الربط الثابت مع الحفاظ على الأداء.
إدارة الذاكرة: يضمن نموذج الملكية في Rust التفاعل الآمن مع المكتبات الأصلية، مانعًا تسرب الذاكرة وأخطاء الاستخدام بعد التحرير (use-after-free) الشائعة في تنفيذات C/C++.
معالجة الأخطاء: توفر معالجة شاملة للأخطاء قائمة على 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 أداءً وخصوصية فائقين مقارنةً بجميع عملاء HTTP القياسية في Rust:
عمليات النسخ الصفري: استدعاءات FFI المباشرة لمكتبات C/Go المحسّنة تلغي نسخ البيانات غير الضروري الذي يعاني منه تنفيذات Rust الخالصة.
تجميع الاتصالات: إعادة استخدام ذكية لاتصالات TLS مع سلوك keep-alive مطابق للمتصفح، مما يقلل الحمل الإضافي للمصافحة بنسبة تصل إلى 80%.
كفاءة الذاكرة: يؤدي نموذج الملكية في Rust إلى جانب المكتبات الأصلية المحسّنة إلى استخدام ذاكرة أقل بنسبة 40% مقارنةً بالحلول المكافئة في Python.
الأداء المتزامن: دعم async أصلي مع تعدد إرسال اتصالات مناسب يتوسع خطيًا مع عدد نوى المعالج.
مقابل روابط Python لـ tls-client:
مقابل tls-client في Go:
مقابل حلول 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(())
}
واجهة العميل الرئيسية لإرسال طلبات HTTP ببصمات TLS شبيهة بالمتصفح.
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/ على Linux وmacOS)حتى مع بصمات 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.
| Library | TLS Fingerprint | Performance | Privacy Level | Memory Usage |
|---|
reqwest + rustls | Detectable Rust signature | Baseline | Low | High |
reqwest + native-tls | System TLS (detectable) | Baseline | Low | High |
hyper + hyper-tls | Generic HTTP/2 | Fast | Low | Medium |
ureq | Basic TLS 1.2/1.3 | Slow | Low | Low |
rust-tlsx | Perfect browser mimicry | 6x faster | Maximum | Optimized |