الفرق بين بروكسي 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).
يجري الاتصال برسائل ثنائية قصيرة، بهذا الترتيب:
- التحية. يرسل العميل رقم الإصدار 5 وقائمة طرق المصادقة التي يدعمها، مثل «بلا مصادقة» (00) و«اسم مستخدم وكلمة مرور» (02).
- اختيار الطريقة. يرد الخادم بالطريقة التي اختارها، أو بالقيمة FF إن لم تناسبه أي طريقة، فيُغلق الاتصال.
- المصادقة. إن اختار الخادم كلمة المرور، يرسل العميل الاسم وكلمة المرور كما يصف RFC 1929.
- الطلب. يرسل العميل الأمر ونوع العنوان والوجهة والمنفذ. نوع العنوان واحد من ثلاثة: IPv4 أو اسم نطاق أو IPv6.
- الرد. يحاول الخادم الاتصال بالوجهة، ثم يرد برمز نتيجة. الصفر يعني النجاح، وبعده تمر بيانات التطبيق كما هي.
هذه هي البايتات الفعلية لطلب اتصال بالموقع 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.
المقارنة
| بروكسي HTTP | SOCKS5 | |
|---|---|---|
| البروتوكولات | الويب، وأي اتصال 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 الاتصال.
ولقياس زمن الاستجابة وعنوان الخروج دون سطر أوامر، استخدم أداة فحص البروكسي، فهي تقبل النوعين.
أيهما تختار
- للتصفح وأدوات الويب: أي النوعين يكفي. اختر ما يدعمه برنامجك بكلمة مرور دون إضافات.
- لبرامج غير الويب: SOCKS5، لأنه يمرّر أي اتصال TCP، وUDP أيضاً إن دعمه الخادم.
- لحماية خصوصية الأسماء: استعمل socks5h أو ما يعادله، أو بروكسي HTTP، حتى تُحلّ الأسماء على البروكسي.
- على شبكة لا تثق بها: لا هذا ولا ذاك، بل بروكسي HTTPS أو VPN، لأن الوجهة وكلمة المرور تمرّان دون تشفير في النوعين.
في syriaproxy
نوفّر النوعين، ومعهما بروكسي HTTPS المشفّر. الخروج من شبكة سيريتل داخل سوريا، والأسماء التي تصلنا تُحلّ هناك عبر خوادم سيريتل. أمثلة الإعداد في إعداد البروكسي.
أسئلة شائعة
هل SOCKS5 أسرع من HTTP؟
الفرق صغير في الغالب. SOCKS5 يضيف رسائل قليلة عند فتح الاتصال، وCONNECT يضيف طلباً ورداً. السرعة تحددها الشبكة خلف البروكسي أكثر من البروتوكول.
هل SOCKS5 أكثر أماناً لأنه لا يقرأ المحتوى؟
ليس بالضرورة. مع مواقع https لا يقرأ أيٌّ منهما المحتوى. ومع مواقع http:// يستطيع أي بروكسي من النوعين رؤية البايتات المارّة، فهي غير مشفّرة أصلاً.
ما الفرق بين SOCKS4 وSOCKS5؟
الإصدار الرابع يدعم TCP وIPv4 فقط وليس فيه مصادقة بكلمة مرور. الخامس أضاف UDP وIPv6، وأسماء النطاقات نوعَ عنوان في المعيار نفسه، وطرق المصادقة.
لماذا يعمل الموقع عبر بروكسي HTTP ولا يعمل عبر SOCKS5؟
من الأسباب المعروفة حلّ الاسم على الجهاز. إن كان DNS المحلي يعطي عنواناً لا يصل إليه البروكسي، يفشل الاتصال. جرّب socks5h أو ما يعادله في برنامجك.
افحص أين تُحلّ أسماء المواقع بأداة فحص تسريب DNS المجانية، والبروكسي مفعّل في متصفحك.