Curl-impersonate: प्रमुख ब्राउज़रों की नकल कर सकने वाला एक विशेष curl बिल्ड
(github.com/lwthiker)curl-impersonate
यह curl का एक विशेष बिल्ड है जो किसी खास ब्राउज़र की नकल कर सकता है, और Chrome, Edge, Safari, Firefox की नकल कर सकता है। curl-impersonate वास्तविक ब्राउज़र की तरह ही TLS और HTTP हैंडशेक कर सकता है। इसे कमांड-लाइन टूल के रूप में इस्तेमाल किया जा सकता है या लाइब्रेरी के रूप में इंटीग्रेट किया जा सकता है.
इसकी ज़रूरत क्यों है?
- जब कोई HTTP क्लाइंट TLS वेबसाइट से संचार करता है, तो सबसे पहले TLS हैंडशेक करता है। इस समय के पहले संदेश को Client Hello कहा जाता है.
- ज़्यादातर HTTP क्लाइंट और लाइब्रेरी जो Client Hello संदेश बनाते हैं, वे वास्तविक ब्राउज़र से काफ़ी अलग होते हैं.
- अगर सर्वर HTTP/2 का उपयोग करता है, तो TLS हैंडशेक के अलावा HTTP/2 हैंडशेक भी ज़रूरी होता है, और इस दौरान एक्सचेंज की जाने वाली सेटिंग्स भी वास्तविक ब्राउज़र से अलग होती हैं.
- इन कारणों से, कुछ वेब सेवाएँ TLS और HTTP हैंडशेक के माध्यम से क्लाइंट की पहचान करती हैं और अलग क्लाइंट्स को अलग कंटेंट देती हैं.
- इस तरीके को TLS fingerprinting और HTTP/2 fingerprinting के नाम से जाना जाता है, और यह वेब को कम खुला, कम निजी और कुछ खास वेब क्लाइंट्स के लिए अधिक सीमित बनाता है.
- इस रिपॉज़िटरी का संशोधित curl TLS और HTTP हैंडशेक को वास्तविक ब्राउज़र जैसा बिलकुल समान दिखाता है.
यह कैसे काम करता है?
curlको ब्राउज़र जैसा दिखने के लिए काफ़ी हद तक संशोधित किया गया है.- Firefox द्वारा उपयोग की जाने वाली TLS लाइब्रेरी nss के साथ curl को कंपाइल किया जाता है, और Chrome वर्ज़न को Google's TLS लाइब्रेरी BoringSSL के साथ कंपाइल किया जाता है.
- विभिन्न TLS एक्सटेंशन और SSL विकल्पों को कॉन्फ़िगर करने का तरीका बदला गया है.
- नए TLS एक्सटेंशन सपोर्ट जोड़े गए हैं.
- HTTP/2 कनेक्शन के लिए curl की सेटिंग्स बदली गई हैं.
--ciphers,--curvesऔर कुछ-Hheaders जैसे non-default flags के साथ curl चलाया जाता है.
समर्थित ब्राउज़र
- Chrome, Edge, Firefox, Safari के विभिन्न वर्ज़नों की नकल की जा सकती है.
- हर ब्राउज़र के लिए
curl-impersonateचलाने वाली wrapper scripts दी गई हैं.
बुनियादी उपयोग
- हर समर्थित ब्राउज़र के लिए ऐसे wrapper scripts हैं जो आवश्यक headers और flags के साथ
curl-impersonateचलाते हैं. - उदाहरण:
curl_chrome116 https://www.wikipedia.org
दस्तावेज़
- अतिरिक्त दस्तावेज़ docs/ डायरेक्टरी में हैं.
इंस्टॉलेशन
- तकनीकी कारणों से
curl-impersonateके दो वर्ज़न हैं। एक chrome वर्ज़न, जो Chrome, Edge, Safari की नकल करता है, और एक firefox वर्ज़न, जो Firefox की नकल करता है. - Linux और macOS के लिए pre-compiled binaries GitHub release page पर उपलब्ध हैं.
उन्नत उपयोग
libcurl-impersonate
libcurl-impersonate.soवही libcurl है जिसे कमांड-लाइनcurl-impersonateजैसे ही बदलावों के साथ कंपाइल किया गया है.- यह अतिरिक्त API फ़ंक्शन
curl_easy_impersonateप्रदान करता है.
CURL_IMPERSONATE environment variable का उपयोग
- जो एप्लिकेशन पहले से
libcurlका उपयोग करते हैं, उनमेंLD_PRELOADका उपयोग करके रनटाइम पर मौजूदा लाइब्रेरी को बदला जा सकता है. CURL_IMPERSONATEenvironment variable सेट करके सभी विकल्प अपने-आप सेट किए जा सकते हैं.
योगदान
- open issues देखें, और बदलावों के साथ pull request खोलकर योगदान दिया जा सकता है.
स्पॉन्सर
- ऐसे स्पॉन्सर हैं जो प्रोजेक्ट को ओपन रखने और बनाए रखने में मदद करते हैं। अगर आप स्पॉन्सर बनना चाहते हैं, तो सीधे संपर्क कर सकते हैं.
1 टिप्पणियां
Hacker News राय
कोडर और प्रकाशक को बधाई। मैं OpenSSL का उपयोग करने वाले एक browser project में शामिल हूँ, और मुझे लगा था कि मुझे WireShark के ज़रिए खुद विश्लेषण करना पड़ेगा। अब संदर्भ के लिए बहुत सारा material उपलब्ध है। अगर OpenSSL का सबसे आम उपयोग Python में है, तो Cloudflare के दौर में Firefox TLS spoofing option अनिवार्य है।
उम्मीद है कि Ladybird भविष्य में ध्यान आकर्षित करेगा। अभी यह networking के लिए cURL का उपयोग कर रहा है। cURL में अभी भी कुछ सीमाएँ हो सकती हैं (जैसे WebSockets को h2 पर handle नहीं कर सकता)। लेकिन अगर कोई नया browser engine उभरता है, तो वैध traffic का fingerprint डिफ़ॉल्ट cURL जैसा हो सकता है।
मैं सोच रहा हूँ कि क्या IP_TTL value को platform के अनुसार सेट किया गया है। अगर नहीं किया गया, तो IP layer पर कुछ हद तक fingerprint छूट सकता है। अगर IP layer की TTL value 64 से कम है, तो यह दिखाता है कि यह या तो आधुनिक Windows पर नहीं चल रहा, या ऐसे आधुनिक Windows device पर चल रहा है जिसका default TTL बदला गया है। आधुनिक Windows के packet TTL डिफ़ॉल्ट रूप से 128 से शुरू होते हैं, जबकि अधिकांश दूसरे platform 64 से शुरू होते हैं। दूसरे platform को internet communication में कोई समस्या नहीं होती, इसलिए आधुनिक Windows के IP packet remote side से हमेशा 64 या उससे अधिक TTL के साथ दिखाई देते हैं।
अगर TLS handshake अलग दिखता है, तो क्या nginx स्तर का ऐसा filter संभव है जो web browser (जैसे Chrome user agent) होने का दावा करने वाले traffic को filter कर सके? यह malicious bot traffic का बड़ा हिस्सा बनाता है, और मैं इसे block करना चाहता हूँ।
ऐसी चीज़ों को यहाँ आते देख कर मेरे मन में हमेशा मिली-जुली भावना रहती है। एक तरफ, यह जानना अच्छा है कि लोगों में स्वतंत्रता और विद्रोही भावना अभी भी ज़िंदा है। लेकिन "Freedom is unstable" project की तरह, अगर इससे अनचाहा ध्यान आकर्षित होता है, तो इस पर निर्भर लोगों के लिए स्थिति और खराब हो सकती है। browser लिखना कठिन है, और मौजूदा vendor इसे लगातार और कठिन बना रहे हैं।
यह tool एक छोटे bash script और gnu parallel के साथ मिलकर red team काम में https endpoint को map करने के लिए बहुत उपयोगी है। मैं इसे उन address ranges में उपयोग करता हूँ जो केवल सही browser को ही response देते हैं। header spoofing के लिए आप -H जैसे सामान्य curl switch का उपयोग कर सकते हैं।
Showhn के समय का लिंक
अब मैं MCP version का इंतज़ार कर रहा हूँ :)
वह सरल दौर याद आता है जब websites बस bots को allow या block करती थीं।