
🦀 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;