
🦀 Rust के लिए स्टील्थ HTTP क्लाइंट। अज्ञेय अनुरोधों के लिए वास्तविक ब्राउज़र TLS फ़िंगरप्रिंट का अनुकरण करता है। तेज़, टाइप-सुरक्षित, और सटीक नेटवर्किंग के लिए निर्मित।
.
Rust के लिए एक उन्नत स्टील्थ HTTP क्लाइंट।
गोपनीयता के प्रति जागरूक डेवलपर्स के लिए बनाया गया है, जिन्हें अपने नेटवर्क फ़िंगरप्रिंट पर पूर्ण नियंत्रण की आवश्यकता होती है।
ब्राउज़र जैसा दिखता है। ब्राउज़र की तरह कार्य करता है। Rust में लिखा गया है।
bogdanfinn/tls-client पर आधारित - यह उद्योग-अग्रणी TLS फ़िंगरप्रिंटिंग लाइब्रेरी है जिस पर दुनिया भर के सुरक्षा पेशेवर भरोसा करते हैं। हम FFI बाइंडिंग के माध्यम से bogdanfinn की युद्ध-परीक्षित साझा लाइब्रेरीज़ (.dll/.so/.dylib) का उपयोग करते हैं, क्योंकि:
RustTLSX इस सिद्ध तकनीक को Rust में एक टाइप-सेफ़, एर्गोनोमिक API के साथ लाता है जो Python विकल्पों से 6 गुना तेज़ है।
आधुनिक वेब एप्लिकेशन आपके HTTP अनुरोधों के हर पहलू का विश्लेषण करते हैं - केवल हेडर और कुकीज़ ही नहीं, बल्कि आपके TLS हैंडशेक के गहरे क्रिप्टोग्राफ़िक हस्ताक्षर भी। मानक Rust HTTP क्लाइंट (reqwest, hyper, ureq) आसानी से पहचाने जाने योग्य पैटर्न उत्पन्न करते हैं जो स्वचालित ट्रैफ़िक को तुरंत पहचान लेते हैं।
RustTLSX इसे इस प्रकार हल करता है:
अपने प्लेटफ़ॉर्म के लिए आवश्यक TLS क्लाइंट लाइब्रेरी को tls-client releases से डाउनलोड करें:
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 पहिए का पुन: आविष्कार करने के बजाय सिद्ध उत्कृष्टता की नींव पर बनाया गया है। हम bogdanfinn की संकलित लाइब्रेरीज़ (.dll/.so/.dylib) का उपयोग FFI के माध्यम से करते हैं, क्योंकि:
शोध निवेश: Bogdanfinn ने ब्राउज़र TLS व्यवहार को रिवर्स-इंजीनियर करने में हज़ारों घंटे लगाए हैं। इस शोध को दोहराने में वर्षों लगेंगे और संभवतः बेहतर परिणाम नहीं मिलेंगे।
युद्ध-परीक्षित विश्वसनीयता: इन लाइब्रेरीज़ का उपयोग दुनिया भर के प्रमुख सुरक्षा फर्मों, गोपनीयता टूल और शोध संस्थानों द्वारा किया जाता है। इन्हें हर प्रमुख सुरक्षा प्रणाली के विरुद्ध परीक्षण किया गया है।
निरंतर विकास: ब्राउज़र फ़िंगरप्रिंट लगातार बदलते रहते हैं। bogdanfinn की लाइब्रेरीज़ को नए ब्राउज़र संस्करणों और सुरक्षा प्रणाली अपडेट से मेल खाने के लिए नियमित अपडेट मिलते हैं।
प्रदर्शन अनुकूलन: नेटिव C/Go कार्यान्वयन गति और मेमोरी दक्षता के लिए अत्यधिक अनुकूलित है, जो शुद्ध Rust कार्यान्वयन से बेहतर प्रदर्शन देता है।
रनटाइम डायनामिक लोडिंग: स्थिर लिंकिंग जटिलता को समाप्त करते हुए प्रदर्शन बनाए रखने के लिए लाइब्रेरीज़ को FFI का उपयोग करके ऑन-डिमांड लोड किया जाता है।
मेमोरी प्रबंधन: Rust का स्वामित्व मॉडल नेटिव लाइब्रेरीज़ के साथ सुरक्षित इंटरैक्शन सुनिश्चित करता है, जो 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 सभी मानक Rust HTTP क्लाइंट की तुलना में बेहतर प्रदर्शन और गोपनीयता प्रदान करता है:
ज़ीरो-कॉपी संचालन: अनुकूलित C/Go लाइब्रेरीज़ के लिए प्रत्यक्ष FFI कॉल शुद्ध Rust कार्यान्वयन को प्रभावित करने वाली अनावश्यक डेटा प्रतिलिपि को समाप्त करते हैं।
कनेक्शन पूलिंग: ब्राउज़र-सटीक कीप-अलाइव व्यवहार के साथ TLS कनेक्शनों का बुद्धिमान पुन: उपयोग, हैंडशेक ओवरहेड को 80% तक कम करता है।
मेमोरी दक्षता: Rust का स्वामित्व मॉडल अनुकूलित नेटिव लाइब्रेरीज़ के साथ मिलकर समकक्ष Python समाधानों की तुलना में 40% कम मेमोरी उपयोग देता है।
समवर्ती प्रदर्शन: उचित कनेक्शन मल्टीप्लेक्सिंग के साथ नेटिव async समर्थन CPU कोर के साथ रैखिक रूप से स्केल करता है।
Python tls-client बाइंडिंग की तुलना में:
Go tls-client की तुलना में:
Node.js समाधानों की तुलना में:
उपयुक्त बाइनरी को tls-client releases से डाउनलोड करें:
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 गुना तेज़ | अधिकतम | अनुकूलित |