दिलचस्प पोस्ट
क्या निष्पादन समय सीमा के लिए नींद का समय लगता है? स्थिति तत्व खड़ी तय, पूर्ण क्षैतिज रूप से एंड्रॉइड स्टूडियो: ग्रेड – बिल्ड विफल रहता है – कार्य निष्पादन के लिए विफल ': dexDebug' किसी संदर्भ प्रकार के दो उदाहरणों की तुलना करने के लिए "सर्वोत्तम अभ्यास" क्या है? Hadoop "अपने मंच के लिए मूल-हदीस पुस्तकालय लोड करने में असमर्थ" चेतावनी Google Gson – deserialize सूची <class> ऑब्जेक्ट? (सामान्य प्रकार) JavaScript में enums को परिभाषित करने के लिए पसंदीदा सिंटैक्स क्या है? PHP फाइलों में यूटीएफ -8 बीओएम हस्ताक्षर आयात ईर्रर: नाम एक्स आयात नहीं किया जा सकता लॉग बेस (2) सी / सी ++ में लिखने के लिए कैसे क्यों शून्य = शून्य एसक्यूएल सर्वर में झूठ का मूल्यांकन करता है आपके द्वारा प्रदान की गई प्राधिकरण तंत्र समर्थित नहीं है। कृपया एडब्ल्यूएस 4-एचएमएसी-एसएचए 256 का उपयोग करें "अप्रत्याशित टोकन अवैध" के लिए कोई दृश्य कारण नहीं MATLAB ओओपी धीमा है या क्या मैं कुछ गलत कर रहा हूं? कैसे ठीक से बंद जावा निष्पादक सेवा

कैसे सी # में एक साधारण प्रॉक्सी बनाने के लिए?

मैंने कुछ हफ्ते पहले Privoxy डाउनलोड किया है और मज़ा के लिए मैं जानना चाहता था कि इसका एक सरल संस्करण कैसे किया जा सकता है।

मैं समझता हूं कि मुझे प्रॉक्सी के अनुरोध भेजने के लिए ब्राउज़र (क्लाइंट) को कॉन्फ़िगर करना होगा प्रॉक्सी वेब पर अनुरोध भेजते हैं (मान लें कि यह एक HTTP प्रॉक्सी है)। प्रॉक्सी का उत्तर प्राप्त होगा … लेकिन प्रॉक्सी ब्राउज़र (क्लाइंट) के अनुरोध को वापस कैसे भेज सकता है?

मेरे पास सी # और http प्रॉक्सी के लिए वेब पर खोज है लेकिन मुझे ऐसा कुछ नहीं मिला है जो मुझे समझ में आ रहा है कि यह कैसे दृश्य के पीछे सही तरीके से काम करता है (मेरा मानना ​​है कि मुझे कोई रिवर्स प्रॉक्सी नहीं चाहिए, लेकिन मुझे यकीन नहीं है)।

क्या आपमें से किसी के पास कुछ स्पष्टीकरण या कुछ जानकारी है जो मुझे इस छोटी परियोजना को जारी रखेगी?

अद्यतन करें

यह मैं समझता हूं (नीचे ग्राफ़िक देखें)।

चरण 1 मैं क्लाइंट (ब्राउज़र) को सभी अनुरोध 127.0.0.1 को पोर्ट पर प्रॉक्सी पर भेजना कॉन्फ़िगर करता हूं। इस तरह, अनुरोध सीधे इंटरनेट पर नहीं भेजा जाएगा, लेकिन प्रॉक्सी द्वारा संसाधित किया जाएगा

चरण 2 प्रॉक्सी एक नया कनेक्शन देखें, HTTP हैडर पढ़ें और देखें कि उसे निष्पादित करना आवश्यक है। वह अनुरोध निष्पादित करता है

चरण 3 प्रॉक्सी को अनुरोध से एक उत्तर प्राप्त होता है। अब उसे वेब से ग्राहक को जवाब भेजना होगा लेकिन कैसे ???

वैकल्पिक शब्द

उपयोगी लिंक

मानसिक प्रॉक्सी : मुझे यह प्रोजेक्ट मिल गया है जो एक प्रॉक्सी है (लेकिन जितना मैं चाहूंगा)। मैं स्रोत की जांच कर सकता हूं लेकिन मैं वास्तव में मूलभूत चीज़ों को और अधिक समझने के लिए चाहता हूं।

एएसपी प्रॉक्सी : मैं यहां कुछ जानकारी भी प्राप्त कर सकता हूं I

अनुरोध परावर्तक : यह एक सरल उदाहरण है

यहां एक सरल एचटीपीपी प्रॉक्सी के साथ एक गिट हब रेपॉजिटरी है

वेब के समाधान से एकत्रित समाधान "कैसे सी # में एक साधारण प्रॉक्सी बनाने के लिए?"

आने वाले अनुरोधों और HttpWebRequest वर्ग के अनुरोधों को रिले करने के लिए आप HttpListener वर्ग के साथ एक बना सकते हैं।

मैं HttpListener या ऐसा कुछ का उपयोग नहीं होगा, इस तरह से आप इतने सारे मुद्दों पर आ जाएगा

सबसे महत्वपूर्ण यह समर्थन करने के लिए एक बड़ा दर्द होगा:

  • प्रॉक्सी रखें- जिंदा
  • SSL काम नहीं करेगा (एक सही तरीके से, आपको पॉपअप मिलेगा)
  • .NET पुस्तकालयों का कड़ाई से आरएफसी का पालन होता है जो कुछ अनुरोधों को विफल करने का कारण बनता है (भले ही आईई, एफएफ और दुनिया का कोई भी अन्य ब्राउज़र काम करेगा।)

आपको क्या करने की आवश्यकता है:

  • एक टीसीपी पोर्ट सुनें
  • ब्राउज़र अनुरोध पार्स करें
  • उस मेजबान को टीसीपी स्तर से होस्ट से निकालें
  • जब तक आप कस्टम शीर्ष लेख आदि जोड़ना नहीं चाहते हैं, तब तक सब कुछ आगे और आगे बढ़ाएं।

मैंने विभिन्न आवश्यकताओं के साथ .NET में 2 भिन्न HTTP प्रॉक्सी लिखे हैं और मैं आपको बता सकता हूं कि यह करने का सबसे अच्छा तरीका है।

मानसिकता यह कर रही है, लेकिन उनका कोड "प्रतिनिधि स्पेगेटी" है, जो गोतो से भी बदतर है 🙂

प्रॉक्सी निम्नलिखित तरीके से काम कर सकता है

चरण 1, प्रॉक्सीहोस्ट: प्रॉक्सीपोर्ट का उपयोग करने के लिए ग्राहक को कॉन्फ़िगर करें

प्रॉक्सी एक TCP सर्वर है जो proxyHost पर सुन रहा है: प्रॉक्सीपोर्ट ब्राउज़र प्रॉक्सी के साथ संबंध खोलता है और एचटीटीपी अनुरोध भेजता है। प्रॉक्सी इस अनुरोध को पार्स करता है और "होस्ट" हेडर का पता लगाने की कोशिश करता है यह हेडर प्रॉक्सी कहता है कि कनेक्शन खोलने के लिए।

चरण 2: प्रॉक्सी "होस्ट" शीर्षलेख में निर्दिष्ट पते के संबंध खोलता है। फिर यह उस दूरस्थ सर्वर पर HTTP अनुरोध भेजता है। प्रतिक्रिया पढ़ता है

चरण 3: प्रतिक्रिया के बाद दूरस्थ HTTP सर्वर से पढ़ा जाता है, प्रॉक्सी ब्राउज़र के साथ एक पहले खोले गए TCP कनेक्शन के माध्यम से प्रतिक्रिया भेजता है।

योजनाबद्ध रूप से यह ऐसा दिखेगा:

 Browser Proxy HTTP server Open TCP connection Send HTTP request -----------> Read HTTP header detect Host header Send request to HTTP -----------> Server <----------- Read response and send <----------- it back to the browser Render content 

मैंने हाल ही में सी # .net में TcpListener और TcpClient का उपयोग करके एक हल्के वजन प्रॉक्सी लिखा है।

https://github.com/titanium007/Titanium-Web-Proxy

यह सुरक्षित HTTP को सही तरीके से समर्थन करता है, क्लाइंट मशीन को प्रॉक्सी द्वारा प्रयुक्त रूट प्रमाणपत्र पर विश्वास करने की आवश्यकता होती है। इसके अलावा वेबसैट रिले का समर्थन करता है HTTP 1.1 की सभी विशेषताएं पाइपलाइनिंग को छोड़कर समर्थित हैं। पाइपलाइंस का उपयोग किसी भी तरह के आधुनिक ब्राउज़रों द्वारा नहीं किया जाता है। इसके अलावा विंडोज प्रमाणीकरण (सादे, डाइजेस्ट) का समर्थन करता है

आप प्रोजेक्ट को संदर्भित करके अपने आवेदन को जोड़ सकते हैं और फिर सभी ट्रैफ़िक देख और संशोधित कर सकते हैं। (अनुरोध और प्रतिक्रिया)

जहां तक ​​प्रदर्शन किया जाता है, मैंने इसे अपने मशीन पर परीक्षण किया है और बिना किसी देरी के काम करता है।

यदि आप बस ट्रैफ़िक को रोकना चाहते हैं, तो आप प्रॉक्सी बनाने के लिए बुद्धिमत्ता का उपयोग कर सकते हैं …

http://fiddler.wikidot.com/fiddlercore

यूआई के साथ सबसे पहले आईआईडी चलाने वाला यह देखने के लिए कि यह क्या करता है, यह एक प्रॉक्सी है जो आपको http / https यातायात को डीबग करने की अनुमति देता है। यह सी # में लिखा है और एक कोर है जिसे आप अपने स्वयं के अनुप्रयोगों में बना सकते हैं।

ध्यान रखें कि FiddlerCore व्यावसायिक अनुप्रयोगों के लिए निशुल्क नहीं है

ओविन और वेबएपीआई के साथ चीजें वास्तव में आसान हो गई हैं सी # प्रॉक्सी सर्वर के लिए मेरी खोज में, मैं भी इस पोस्ट http://blog.kloud.com.au/2013/11/24/do-it-yourself-web-api-proxy/ पर आया था। यह वह सड़क होगा जिसे मैं ले रहा हूं।

यदि आप HTTPListener का उपयोग करते हैं, तो आपको कई समस्याएं आ रही हैं, आपको अनुरोधों को पार्स करना होगा और हेडर और …

  1. ब्राउज़र अनुरोधों को सुनने के लिए टीसीपी श्रोता का उपयोग करें
  2. केवल अनुरोध की पहली पंक्ति को पार्स करें और होस्ट डोमेन और पोर्ट को कनेक्ट करें
  3. ब्राउज़र अनुरोध की पहली पंक्ति पर मौजूद मेजबान को सटीक कच्चे अनुरोध भेजें
  4. लक्ष्य साइट से डेटा प्राप्त करें (मुझे इस खंड में समस्या है)
  5. मेजबान से ब्राउज़र तक प्राप्त सटीक डेटा भेजें

आप देख रहे हैं कि आपको ब्राउज़र के अनुरोध में क्या जानने की जरूरत नहीं है और इसे पार्स करने की आवश्यकता नहीं है, केवल पहली पंक्ति से लक्ष्य साइट पता प्राप्त करें, पहले लाइन को आमतौर पर इसे GET http://google.com HTTP1.1 या facebook.com कनेक्ट करें: 443 (यह एसएसएल अनुरोधों के लिए है)

Socks4 लागू करने के लिए एक बहुत सरल प्रोटोकॉल है। आप प्रारंभिक कनेक्शन के लिए सुनो, ग्राहक द्वारा अनुरोध किए गए मेजबान / पोर्ट से कनेक्ट करें, सफलता कोड को ग्राहक को भेजें और फिर आउटकॉन्ग और आवक धाराओं को सॉकेट्स में आगे भेजें।

यदि आप HTTP के साथ जाते हैं तो आपको कुछ एचटीपी हेडर को पढ़ना होगा और संभवत: सेट / निकालना होगा, ताकि थोड़ा और काम हो।

अगर मुझे सही याद है, तो एसएसएल HTTP और मोज़े परदे के पीछे काम करेगा। एक HTTP प्रॉक्सी के लिए आप कनेक्ट क्रिया को कार्यान्वित करते हैं, जो ऊपर वर्णित सॉकेट 4 जैसा काम करता है, फिर क्लाइंट प्रॉक्सीड टीसीपी स्ट्रीम में SSL कनेक्शन को खोलता है।

ब्राउज़र प्रॉक्सी से जुड़ा है, इसलिए जो वेब सर्वर से प्रॉक्सी प्राप्त होता है वह डेटा उसी कनेक्शन के माध्यम से भेजा जाता है जो ब्राउज़र को प्रॉक्सी के लिए शुरू किया गया था।

मैंने asp.net / web api के लिए एक सरल लेकिन शक्तिशाली रिवर्स प्रॉक्सी भी लिखा था

आप इसे यहां पा सकते हैं: https://github.com/SharpTools/SharpReverseProxy

बस नूगेट के माध्यम से अपनी परियोजना में जोड़ें और आप जाने के लिए अच्छा कर रहे हैं आप प्रमाणीकरण विफलता के कारण फ़्लाई को अनुरोध, प्रतिक्रिया या अग्रेषण से इनकार कर सकते हैं।

स्रोत कोड पर एक नज़र डालें, इसे लागू करने में वास्तव में आसान है 🙂