سؤال

لقد تم تحميل Privoxy عدة أسابيع و المتعة كان من الغريب أن نعرف كيف نسخة بسيطة من أنه يمكن القيام به.

وأنا أفهم أن كنت بحاجة إلى تكوين المتصفح (client) إرسال الطلب إلى وكيل.وكيل إرسال الطلب إلى شبكة الإنترنت (دعونا نقول انها http proxy).الوكيل سوف تتلقى الجواب...ولكن كيف يمكن أن وكيل إعادة إرسال الطلب إلى المتصفح (client)?

لدي بحث على شبكة الإنترنت عن C# و http proxy ولكن لم يتم العثور على شيء اسمحوا لي أن نفهم كيف يعمل خلف الكواليس بشكل صحيح.(أعتقد أنني لا أريد عكس الوكيل ولكن أنا لست متأكدا).

هل لديك بعض الشرح أو بعض المعلومات التي سوف اسمحوا لي أن تستمر هذه الصغيرة المشروع ؟

التحديث

هذا هو ما أفهمه (انظر الرسم البياني أدناه).

الخطوة 1 أنا تكوين العميل (المستعرض) عن كل طلب يرسل إلى 127.0.0.1 في ميناء الوكيل الاستماع.هذه الطريقة ، طلب عدم إرسالها إلى الإنترنت مباشرة ولكن سيتم معالجتها من قبل الوكيل.

Step2 الوكيل انظر اتصال جديد ، قراءة HTTP وانظر الطلب يجب أن ينفذ.انه ينفذ الطلب.

Step3 الوكيل تتلقى جوابا من الطلب.الآن أنه يجب إرسال الإجابة من شبكة الإنترنت إلى العميل ولكن كيف???

alt text

الرابط المفيد

Mentalis الوكيل :لقد وجدت هذا المشروع الذي هو وكيل (ولكن أكثر أود).كنت قد التحقق من مصدر ولكن أردت حقا شيء أساسي أن نفهم أكثر هذا المفهوم.

ASP الوكيل :وأنا قد تكون قادرة على الحصول على بعض المعلومات من هنا أيضا.

طلب عاكس :هذا مثال بسيط.

هنا بوابة محور مستودع مع بسيطة Http Proxy.

هل كانت مفيدة؟

المحلول

يمكنك بناء واحد مع HttpListener فئة للاستماع لطلبات واردة ، HttpWebRequest فئة تتابع الطلبات.

نصائح أخرى

أنا لن تستخدم HttpListener أو شيء من هذا القبيل في هذا الطريق سوف تأتي عبر العديد من القضايا.

والأهم من ذلك أنه سوف يكون الألم ضخمة لدعم:

  • وكيل الحفاظ على التشغيل
  • SSL لن تعمل (في الطريق الصحيح, سوف تحصل على بالنوافذ)
  • .صافي المكتبات تتبع بصرامة المراجع مما يسبب بعض طلبات فشل (على الرغم من أن أي و و أي متصفح في العالم العمل.)

ما تحتاج إلى القيام به هو:

  • الاستماع على منفذ TCP
  • تحليل المتصفح الطلب
  • استخراج المضيف الاتصال التي تستضيف في TCP مستوى
  • إلى الأمام كل شيء ذهابا وإيابا إلا إذا كنت ترغب في إضافة رؤوس مخصصة الخ.

كتبت مختلفة 2 HTTP وكلاء في .صافي مع متطلبات مختلفة و أستطيع أن أقول لكم أن هذا هو أفضل طريقة للقيام بذلك.

Mentalis القيام بذلك ، ولكن الرمز هو "مندوب السباغيتي" ، أسوأ من غوتو :)

لقد كتبت خفيفة الوزن الوكيل في c# .صافي باستخدام TcpListener و TcpClient.

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

وهو يدعم HTTP آمن على الطريق الصحيح ، جهاز العميل يحتاج إلى الثقة الشهادة الجذر المستخدمة من قبل الوكيل.كما يدعم WebSockets التتابع.جميع الميزات HTTP 1.1 معتمدة باستثناء pipelining.Pipelining لا يستخدم من قبل معظم المتصفحات الحديثة على أي حال.كما يدعم مصادقة windows (سهل الهضم).

يمكنك ربط التطبيق الخاص بك عن طريق الرجوع إلى المشروع ثم انظر وتعديل جميع حركة المرور.(الطلب والاستجابة).

بقدر الأداء, لقد اختبرت ذلك على الجهاز و يعمل بدون أي تأخير ملحوظ.

وكيل يمكن أن تعمل بالطريقة التالية.

Step1 تكوين العميل لاستخدام proxyHost:proxyPort.

الوكيل هو TCP server الاستماع على proxyHost:proxyPort.المتصفح يفتح اتصال مع وكيل بإرسال طلب Http.الوكيل يوزع هذا الطلب ويحاول الكشف عن "المضيف" رأس.هذا الرأس سوف اقول الوكيل أين لفتح الاتصال.

الخطوة 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

إذا كنت تبحث فقط لاعتراض حركة المرور ، يمكن استخدام العابث الأساسية لإنشاء الوكيل...

http://fiddler.wikidot.com/fiddlercore

تشغيل عازف الكمان الأول مع واجهة المستخدم لنرى ماذا يفعل ، بل هو الوكيل الذي يسمح لك لتصحيح http/https حركة المرور.هو مكتوب في c# و قد الأساسية التي يمكنك بناء في التطبيقات الخاصة بك.

نضع في اعتبارنا FiddlerCore ليست حرة للتطبيقات التجارية.

الأمور أصبحت من السهل حقا مع OWIN و WebAPI.في البحث عن C# "الملقم الوكيل", كما جاء عبر هذا المنصب http://blog.kloud.com.au/2013/11/24/do-it-yourself-web-api-proxy/ .وسوف يكون هذا الطريق أنا أخذ.

توافق على الدكتور الشر إذا كنت تستخدم HTTPListener سيكون لديك العديد من المشاكل تحتاج إلى تحليل الطلبات وسوف تشارك إلى رؤوس ...

  1. استخدام tcp المستمع للاستماع إلى طلبات المستعرض
  2. تحليل السطر الأول فقط من الطلب و الحصول على استضافة المجال و منفذ لتوصيل
  3. إرسال الدقيق الخام طلب إلى العثور على المضيف في السطر الأول من متصفح طلب
  4. الحصول على البيانات من موقع الهدف(لدي مشكلة في هذا القسم)
  5. ارسال نفس البيانات الواردة من المضيف إلى المتصفح

ترى أنت لا تحتاج أن تعرف حتى ما هو في المتصفح طلب وتحليل ذلك فقط على الموقع المستهدف العنوان من أول السطر السطر الأول عادة ما يحب هذا الحصول على http://google.com HTTP1.1 أو الاتصال facebook.com:443 (هذا هو ssl طلبات)

Socks4 هو بسيط جدا البروتوكول إلى تنفيذ.يمكنك الاستماع الأولية ، الاتصال المضيف/ميناء المطلوبة من قبل العميل ، وإرسال رمز نجاح إلى العميل ثم إلى الأمام الصادرة والواردة تيارات عبر مآخذ.

إذا كنت اذهب مع HTTP عليك أن تقرأ وربما تعيين/إزالة بعض رؤوس HTTP بحيث انها أكثر من ذلك بقليل العمل.

إذا كنت أتذكر بشكل صحيح ، SSL سوف تعمل عبر HTTP و Socks.عن وكيل HTTP تطبيق الاتصال الفعل الذي يعمل مثل الكثير من socks4 كما هو موضح أعاله ، ثم يفتح العميل اتصال SSL عبر بروكسي tcp تيار.

متصفح متصل الوكيل حتى البيانات التي الوكيل يحصل من ملقم ويب فقط أرسل عبر نفس الصدد أن المتصفح بدأ إلى الوكيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top