
🦀 عميل 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};