ابدأ الآن سيريا بروكسي syriaproxy أول خدمة بروكسي مختصة بسوريا

الفرق بين بروكسي SOCKS5 وبروكسي HTTP

بروكسي HTTP يفهم بروتوكول الويب، فيقرأ الطلبات غير المشفّرة ويستطيع تعديلها وتخزينها. أما SOCKS5 فيفتح اتصالاً إلى الوجهة التي تطلبها ثم ينقل البايتات كما هي، أياً كان البروتوكول. ولا يشفّر أيٌّ منهما الطريق بينك وبينه.

كيف يعمل بروكسي HTTP

البرنامج المضبوط على بروكسي HTTP يتكلم معه بلغة HTTP نفسها. والطريقة تختلف بحسب نوع الموقع.

مع موقع http:// غير مشفّر، يرسل البرنامج العنوان الكامل في سطر الطلب. تسمّي RFC 9112، القسم 3.2 هذا الشكل «الشكل المطلق» (absolute-form)، وتوجب على العميل استعماله مع البروكسي:

GET http://example.com/page HTTP/1.1
Host: example.com

يقرأ البروكسي الطلب كاملاً، فيعرف المسار والترويسات والمحتوى. ويستطيع أن يخزّن الرد، أو يحجب صفحة، أو يضيف ترويسات قبل أن يمرّر الطلب.

مع موقع https:// يرسل البرنامج طلب CONNECT يحمل اسم الموقع والمنفذ فقط. يفتح البروكسي اتصالاً بالموقع ويرد بنجاح، ثم ينقل البايتات في الاتجاهين دون أن يقرأها.

ويجري التفاوض على TLS بين البرنامج والموقع مباشرة داخل هذا النفق. الخطوات بالتفصيل في طلب CONNECT وبروكسي HTTPS.

كيف يعمل SOCKS5

يصف RFC 1928 بروتوكول SOCKS الإصدار الخامس بأنه طبقة رقيقة بين طبقة التطبيق وطبقة النقل. لا يعرف شيئاً عن الويب ولا عن البريد، بل ينفّذ أمراً واحداً من ثلاثة: فتح اتصال TCP (CONNECT)، أو انتظار اتصال وارد (BIND)، أو ترحيل UDP (UDP ASSOCIATE).

يجري الاتصال برسائل ثنائية قصيرة، بهذا الترتيب:

  1. التحية. يرسل العميل رقم الإصدار 5 وقائمة طرق المصادقة التي يدعمها، مثل «بلا مصادقة» (00) و«اسم مستخدم وكلمة مرور» (02).
  2. اختيار الطريقة. يرد الخادم بالطريقة التي اختارها، أو بالقيمة FF إن لم تناسبه أي طريقة، فيُغلق الاتصال.
  3. المصادقة. إن اختار الخادم كلمة المرور، يرسل العميل الاسم وكلمة المرور كما يصف RFC 1929.
  4. الطلب. يرسل العميل الأمر ونوع العنوان والوجهة والمنفذ. نوع العنوان واحد من ثلاثة: IPv4 أو اسم نطاق أو IPv6.
  5. الرد. يحاول الخادم الاتصال بالوجهة، ثم يرد برمز نتيجة. الصفر يعني النجاح، وبعده تمر بيانات التطبيق كما هي.

هذه هي البايتات الفعلية لطلب اتصال بالموقع example.com على المنفذ 443، بلا مصادقة:

-> 05 01 00
<- 05 00
-> 05 01 00 03 0b "example.com" 01 bb
<- 05 00 00 01 <IPv4 address> <port>

السهم -> من العميل إلى الخادم، و<- بالعكس. في السطر الأول الإصدار 5 وطريقة واحدة هي «بلا مصادقة»، فيقبلها الخادم في السطر الثاني. في الثالث الأمر CONNECT (01)، ونوع العنوان اسم نطاق (03) طوله 11 حرفاً، والمنفذ 0x01bb أي 443.

والرمز 00 في الرد الأخير يعني النجاح. بعده يبدأ البرنامج تفاوض TLS مع الموقع على الاتصال نفسه، والبروكسي لا يرى إلا بايتات مشفّرة.

ترحيل UDP

الأمر UDP ASSOCIATE يعمل بطريقة مختلفة. يطلب العميل الترحيل عبر اتصال TCP المعتاد، فيرد الخادم بعنوان ومنفذ يستقبل عليهما الحزم. بعدها يرسل العميل كل حزمة UDP إلى ذلك العنوان، مع ترويسة صغيرة تحمل وجهتها الحقيقية.

ويبقى اتصال TCP الأول مفتوحاً طوال الوقت، فإن انقطع انتهى الترحيل. وليس كل خادم SOCKS5 يدعم هذا الأمر، فتحقق منه قبل أن تعتمد عليه.

أين تُحلّ أسماء المواقع

هذه نقطة سهلة الإغفال، وقد تسبّب تسريب DNS. في SOCKS5 يستطيع العميل إرسال اسم الموقع نفسه (النوع 03) فيحلّه البروكسي، أو يحلّه هو أولاً ويرسل العنوان الرقمي. المعيار يسمح بالحالتين، والبرنامج هو الذي يختار.

في curl مثلاً، المخطط socks5:// يحلّ الاسم على جهازك، والمخطط socks5h:// يرسله إلى البروكسي ليحلّه، كما يشرح دليل curl. وفي فايرفوكس خيار «Proxy DNS when using SOCKS v5» يؤدي الغرض نفسه. أما بروكسي HTTP فيستلم الاسم دائماً في الطلب، فيحلّه البروكسي.

إن حُلّ الاسم على جهازك، فخادم DNS المحلي يعرف المواقع التي تزورها، وقد يكون جواب الاسم مختلفاً عمّا يراه البروكسي في بلده. الشرح الكامل في ما هو تسريب DNS.

المقارنة

بروكسي HTTPSOCKS5
البروتوكولاتالويب، وأي اتصال TCP عبر CONNECT إن سمح البروكسيأي اتصال TCP
UDPلا ينقله CONNECT التقليدينعم، بالأمر UDP ASSOCIATE إن دعمه الخادم
قراءة المحتوىيقرأ طلبات http://، ولا يقرأ داخل نفق httpsلا يحلّل المحتوى
إضافة ترويساتممكنة في طلبات http://غير ممكنة
حلّ الأسماءعلى البروكسيعلى البروكسي أو على جهازك، بحسب البرنامج
المصادقة407 وترويسة Proxy-Authorizationاسم وكلمة مرور حسب RFC 1929
التشفير إلى البروكسيلا، إلا بروكسي HTTPSلا

دعم البرامج

المتصفحات وأدوات سطر الأوامر ومعظم مكتبات البرمجة تدعم النوعين. لكن الدعم ليس كاملاً دائماً. كروم مثلاً لا يدعم أي طريقة مصادقة مع SOCKS5، كما تذكر وثائق Chromium، فيحتاج بروكسي SOCKS5 بكلمة مرور إلى إضافة أو برنامج وسيط.

وبعض البرامج لا تقبل إلا بروكسي HTTP. وبرامج أخرى تعتمد على UDP، كالمكالمات الصوتية والمرئية وبعض الألعاب، فلا يكفيها نفق CONNECT لأنه ينقل TCP فقط.

كيف تختبر النوعين

اطلب الصفحة نفسها عبر كل نوع، مع الخيار -v لترى خطوات الاتصال:

curl -v -x http://USER:PASS@proxy.example.com:8080 https://example.com/
curl -v -x socks5h://USER:PASS@proxy.example.com:1080 https://example.com/

في الأول يظهر سطر CONNECT example.com:443 ثم رد البروكسي. وفي الثاني يظهر أن curl أرسل الاسم إلى خادم SOCKS5. وإن فشلت المصادقة يرد بروكسي HTTP بالرمز 407، ويغلق خادم SOCKS5 الاتصال.

ولقياس زمن الاستجابة وعنوان الخروج دون سطر أوامر، استخدم أداة فحص البروكسي، فهي تقبل النوعين.

أيهما تختار

في syriaproxy

نوفّر النوعين، ومعهما بروكسي HTTPS المشفّر. الخروج من شبكة سيريتل داخل سوريا، والأسماء التي تصلنا تُحلّ هناك عبر خوادم سيريتل. أمثلة الإعداد في إعداد البروكسي.

أسئلة شائعة

هل SOCKS5 أسرع من HTTP؟

الفرق صغير في الغالب. SOCKS5 يضيف رسائل قليلة عند فتح الاتصال، وCONNECT يضيف طلباً ورداً. السرعة تحددها الشبكة خلف البروكسي أكثر من البروتوكول.

هل SOCKS5 أكثر أماناً لأنه لا يقرأ المحتوى؟

ليس بالضرورة. مع مواقع https لا يقرأ أيٌّ منهما المحتوى. ومع مواقع http:// يستطيع أي بروكسي من النوعين رؤية البايتات المارّة، فهي غير مشفّرة أصلاً.

ما الفرق بين SOCKS4 وSOCKS5؟

الإصدار الرابع يدعم TCP وIPv4 فقط وليس فيه مصادقة بكلمة مرور. الخامس أضاف UDP وIPv6، وأسماء النطاقات نوعَ عنوان في المعيار نفسه، وطرق المصادقة.

لماذا يعمل الموقع عبر بروكسي HTTP ولا يعمل عبر SOCKS5؟

من الأسباب المعروفة حلّ الاسم على الجهاز. إن كان DNS المحلي يعطي عنواناً لا يصل إليه البروكسي، يفشل الاتصال. جرّب socks5h أو ما يعادله في برنامجك.

افحص أين تُحلّ أسماء المواقع بأداة فحص تسريب DNS المجانية، والبروكسي مفعّل في متصفحك.