Python TCP सकेटहरूका लागि SOCKS-जानकार कनेक्टर
प्रोक्सी-जानकार सकेट कनेक्टर छान्नुहोस् र यसको दायरा Python को प्रक्रिया-व्यापी सकेट कार्यान्वयनबाट अलग राख्नुहोस्।
http_proxy भएकै कारणले मात्र साधारण Python सकेटले प्रोक्सीसँग वार्ता गर्दैन। आफ्नै 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 मा कक्षा तोक्नाले असम्बन्धित आयात र पुस्तकालयहरूलाई असर गर्न सक्छ। यदि अर्को पुस्तकालयले सकेट सिर्जना गर्छ भने, यसको कागजात गरिएको जडान फ्याक्ट्री वा प्रोक्सी विकल्प प्रयोग गर्नुहोस्; यसले कहिल्यै नपढ्ने शब्दकोशले त्यो जडान परिवर्तन गर्न सक्दैन।