
🦀 Rust용 스텔스 HTTP 클라이언트. 감지되지 않는 요청을 위해 실제 브라우저 TLS 지문을 모방합니다. 빠르고, 타입 안전하며, 정밀한 네트워킹을 위해 설계되었습니다.
. Rust를 위한 고급 스텔스 HTTP 클라이언트입니다.
네트워크 핑거프린트를 완벽하게 제어해야 하는 프라이버시 중시 개발자를 위해 제작되었습니다.
브라우저처럼 보입니다. 브라우저처럼 동작합니다. Rust로 작성되었습니다.
bogdanfinn/tls-client 기반으로 구축됨 - 전 세계 보안 전문가들이 신뢰하는 업계 최고의 TLS 핑거프린팅 라이브러리입니다. FFI 바인딩을 통해 bogdanfinn의 전투 검증된 공유 라이브러리(.dll/.so/.dylib)를 사용하는 이유는 다음과 같습니다:
RustTLSX는 이 검증된 기술을 Rust에 적용하여 Python 대안보다 6배 빠른 타입 세이프하고 사용하기 편리한 API를 제공합니다.
최신 웹 애플리케이션은 HTTP 요청의 모든 측면을 분석합니다. 헤더와 쿠키뿐만 아니라 TLS 핸드셰이크의 심층 암호화 서명까지 분석합니다. 표준 Rust HTTP 클라이언트(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를 통해 액세스할 수 있는지 확인하세요.
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 구현에서 문제가 되는 불필요한 데이터 복사를 제거합니다.
연결 풀링: 브라우저와 정확히 일치하는 keep-alive 동작으로 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배 빠름 | 최대 | 최적화됨 |