Python TCP सॉकेट के लिए SOCKS-जागरूक कनेक्टर
प्रॉक्सी को समझने वाला सॉकेट कनेक्टर चुनें और उसका दायरा Python के प्रक्रिया-व्यापी सॉकेट कार्यान्वयन से अलग रखें।
कच्चा Python सॉकेट केवल http_proxy होने के कारण प्रॉक्सी पर बातचीत नहीं करता। अपना TCP प्रोटोकॉल बोलने वाले एप्लिकेशन के लिए ऐसा कनेक्टर उपयोग करें जो प्रॉक्सी एंडपॉइंट पर सेवा को समझता हो।
PySocks पहले से उपलब्ध होने पर, कनेक्शन स्पष्ट रूप से बनाएँ:
import socks
with socks.socksocket() as connection:
connection.set_proxy(socks.SOCKS5, '203.0.113.10', 1080)
connection.settimeout(10)
connection.connect(('example.com', 12345))
# Exchange the destination protocol here.
दस्तावेज़ीकरण का पता और गंतव्य पोर्ट बदलें। अनुमत सार्वजनिक गंतव्य के लिए, SOCKS5 प्रॉक्सी सूची से उम्मीदवार तभी चुनें जब आप जाँच लें कि वह एप्लिकेशन के लक्ष्य पोर्ट की अनुमति देता है। इंस्टॉल किया गया पैकेज, समर्थित विधियाँ और एंडपॉइंट आवश्यकताएँ PySocks इंटरफ़ेस के अनुसार जाँचें।
बाकी एप्लिकेशन इस स्थापित कनेक्शन पर अपना प्रोटोकॉल बदलता है। यदि वह प्रोटोकॉल TLS उपयोग करता है, तो प्रॉक्सी बातचीत के बाद उसे शुरू करें और गंतव्य का वास्तविक होस्टनाम सत्यापित करें। प्रॉक्सी प्रमाणीकरण मार्ग स्थापित करता है; यह गंतव्य लॉगिन या एन्क्रिप्शन प्रदान नहीं करता।
SOCKS श्रोता को SOCKS बातचीत चाहिए। HTTP सेवा को मनमाने TCP गंतव्य के लिए CONNECT-सक्षम कनेक्टर चाहिए और वह अपना पोर्ट अस्वीकार कर सकती है। गलत हैंडशेक छोड़कर पता बदलने के बजाय, वास्तव में दी जा रही सेवा के अनुसार कनेक्टर चुनें।
प्रतिस्थापन स्थानीय रखें। socket.socket को क्लास सौंपने से असंबंधित आयात और लाइब्रेरी प्रभावित हो सकती हैं। यदि किसी अन्य लाइब्रेरी के पास सॉकेट निर्माण है, तो उसकी दस्तावेज़ीकृत कनेक्शन फ़ैक्टरी या प्रॉक्सी विकल्प उपयोग करें; जिस शब्दकोश को वह कभी नहीं पढ़ती, वह उस कनेक्शन को नहीं बदल सकता।