كان websockify يُسمى سابقًا wsproxy وكان جزءًا من مشروع noVNC.
على المستوى الأساسي، يقوم websockify فقط بترجمة حركة مرور WebSockets إلى حركة مرور مأخذ التوصيل العادية. يقبل Websockify مصافحة WebSockets، ويوزعها، ثم يبدأ في إعادة توجيه حركة المرور بين العميل والهدف في كلا الاتجاهين.
يتم نشر الالتزامات والإعلانات والأخبار البارزة على @noVNC
إذا كنت مطورًا/متكاملاً/مستخدمًا لـ websockify (أو تريد أن تكون كذلك)، فيرجى الانضمام إلى مجموعة مناقشة noVNC/websockify
يمكن تقديم طلبات الأخطاء والميزات عبر مشكلات جيثب.
إذا كنت ترغب في إظهار تقديرك لـ websockify، فيمكنك التبرع لمنظمات غير ربحية كبيرة مثل: Compassion International، وSIL، وHabitat for Humanity، وElectronic Frontier Foundation، ومؤسسة مكافحة الملاريا، وNothing But Nets، وما إلى ذلك. يرجى التغريد على @noVNC إذا قمت بذلك .
بدءًا من websockify 0.5.0، يتم دعم بروتوكول HyBi / IETF 6455 WebSocket فقط. لا يوجد دعم لتنسيق البيانات المشفرة Base64 الأقدم.
لتشفير حركة المرور باستخدام نظام URI WebSocket 'wss://'، تحتاج إلى إنشاء شهادة ومفتاح ليتم تحميل Websockify. افتراضيًا، يقوم Websockify بتحميل اسم ملف الشهادة self.pem
ولكن يمكن لخيارات --cert=CERT
و-- --key=KEY
تجاوز اسم الملف. يمكنك إنشاء شهادة موقعة ذاتيًا باستخدام opensl. عندما يُطلب منك الاسم الشائع، استخدم اسم المضيف للخادم الذي سيتم تشغيل الوكيل فيه:
openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
لكي تعمل الشهادة الموقعة ذاتيًا، يجب أن تجعل العميل/المتصفح الخاص بك يفهمها. يمكنك القيام بذلك عن طريق تثبيتها كشهادة مقبولة، أو باستخدام نفس الشهادة لاتصال HTTPS الذي تنتقل إليه أولاً وتوافق عليه. المتصفحات عمومًا لا تمنحك "شهادة الثقة؟" المطالبة عن طريق فتح مقبس WSS بشهادة غير صالحة، وبالتالي تحتاج إلى جعله يقبله عن طريق أي من هاتين الطريقتين.
يمكن اعتبار المنافذ بمثابة اتصالات مميزة بواسطة المتصفح، على سبيل المثال، إذا كان عنوان URL لموقع الويب الخاص بك هو https://my.local:8443 وعنوان URL الخاص بـ WebSocket هو wss://my.local:8001، فتصفح أولاً إلى https:/ /my.local:8001، أضف الاستثناء، ثم استعرض للوصول إلى https://my.local:8443 وأضف استثناءً آخر. بعد ذلك، ستتمكن صفحة html التي يتم تقديمها عبر:8443 من فتح WSS إلى:8001
إذا كان لديك شهادة SSL تجارية/صالحة مع شهادة وسيطة واحدة أو أكثر، فقم بجمعها في ملف واحد، شهادة الخادم أولاً، ثم الوسيط (الشهادات) من CA، وما إلى ذلك. أشر إلى هذا الملف باستخدام خيار --cert
ثم أيضًا إلى المفتاح باستخدام --key
. وأخيرًا، استخدم --ssl-only
حسب الحاجة.
هذه ليست ضرورية للعملية الأساسية.
Daemonizing: عند تحديد الخيار -D
، يعمل websockify في الخلفية كعملية خفية.
SSL (wss:// WebSockets URI): يتم اكتشاف ذلك تلقائيًا بواسطة websockify عن طريق استنشاق البايت الأول المرسل من العميل ثم لف المقبس إذا كانت البيانات تبدأ بـ "x16" أو "x80" (يشير إلى SSL).
تسجيل الجلسة: هذه الميزة التي تسمح بتسجيل حركة المرور المرسلة والمستلمة من العميل إلى ملف باستخدام خيار --record
.
Mini-webserver: يمكن لـ websockify اكتشاف طلبات الويب العادية والاستجابة لها على نفس المنفذ مثل وكيل WebSockets. يتم تنشيط هذه الوظيفة باستخدام خيار --web DIR
حيث يكون DIR هو جذر دليل الويب المطلوب خدمته.
تغليف برنامج: راجع قسم "التفاف البرنامج" أدناه.
ملفات السجل: يمكن لـ websockify حفظ جميع معلومات التسجيل في ملف. يتم تنشيط هذه الوظيفة باستخدام خيار --log-file FILE
حيث FILE هو الملف الذي يجب حفظ السجلات فيه.
المكونات الإضافية للمصادقة: يمكن أن يطلب websockify المصادقة لاتصالات websocket، وإذا كنت تستخدم --web-auth
، أيضًا لطلبات الويب العادية. يتم تنشيط هذه الوظيفة باستخدام خيارات --auth-plugin CLASS
و-- --auth-source ARG
، حيث يكون CLASS عادةً واحدًا من auth_plugins.py وARG هو تكوين المكون الإضافي.
المكونات الإضافية للرمز المميز: يمكن لمثيل واحد من websockify توصيل العملاء بعدة أهداف مختلفة تم تكوينها مسبقًا، اعتمادًا على الرمز المميز الذي يرسله العميل باستخدام معلمة عنوان URL token
، أو اسم المضيف المستخدم للوصول إلى websockify، إذا كنت تستخدم --host-token
. يتم تنشيط هذه الوظيفة باستخدام خيارات --token-plugin CLASS
و-- --token-source ARG
، حيث يكون CLASS عادةً واحدًا من token_plugins.py وARG هو تكوين المكون الإضافي.
التنفيذ الأساسي لـ websockify موجود في لغة python. هناك العديد من التطبيقات البديلة بلغات أخرى متاحة في مستودعاتنا الشقيقة websockify-js (JavaScript/Node.js) وwebsockify-other (C, Clojure, Ruby).
بالإضافة إلى ذلك، هناك العديد من المشاريع الخارجية الأخرى التي تنفذ "بروتوكول" websockify. راجع مصفوفة ميزات التنفيذ البديلة لمزيد من المعلومات.
بالإضافة إلى إنشاء وكيل من عنوان مصدر إلى عنوان هدف (والذي قد يكون على نظام مختلف)، فإن websockify لديه القدرة على تشغيل برنامج على النظام المحلي وحركة مرور WebSockets الوكيل إلى منفذ TCP عادي يملكه/يرتبط به البرنامج.
يتم تحقيق ذلك عن طريق مكتبة LD_PRELOAD ( rebind.so
) التي تعترض استدعاءات النظام bind() بواسطة البرنامج. تم نقل المنفذ المحدد إلى منفذ عالي مجاني لمضيف محلي/استرجاع جديد. websockify ثم يقوم بتوجيه حركة مرور WebSockets إلى المنفذ الأصلي إلى المنفذ الجديد (المنقول) للبرنامج.
يتم استدعاء وضع التفاف البرنامج عن طريق استبدال الهدف بـ --
متبوعًا بسطر أوامر البرنامج للالتفاف.
`./run 2023 -- PROGRAM ARGS`
يمكن استخدام خيار --wrap-mode
للإشارة إلى الإجراء الذي يجب اتخاذه عند خروج البرنامج المُلف أو ظهوره خفيًا.
فيما يلي مثال لاستخدام websockify لتغليف أمر vncserver (أي الخلفيات نفسها) للاستخدام مع noVNC:
`./run 5901 --wrap-mode=ignore -- vncserver -geometry 1024x768 :1`
فيما يلي مثال على تغليف telnetd (من krb5-telnetd). يخرج telnetd بعد إغلاق الاتصال بحيث يتم ضبط وضع الالتفاف لإعادة تشغيل الأمر:
`sudo ./run 2023 --wrap-mode=respawn -- telnetd -debug 2023`
توضح صفحة wstelnet.html
في مشروع websockify-js عميل telnet بسيط يعتمد على WebSockets (استخدم "المضيف المحلي" و"2023" للمضيف والمنفذ على التوالي).
قم بتنزيل أحد الإصدارات أو أحدث إصدار تطوير، واستخرجه وقم بتشغيل python3 setup.py install
كجذر في الدليل الذي قمت باستخراج الملفات منه. عادةً، سيؤدي هذا أيضًا إلى تثبيت numpy للحصول على أداء أفضل، إذا لم تكن قد قمت بتثبيته بالفعل. ومع ذلك، numpy اختياري. إذا كنت لا تريد تثبيت numpy أو إذا لم تتمكن من تجميعه، فيمكنك تحرير setup.py وإزالة install_requires=['numpy'],
السطر قبل تشغيل python3 setup.py install
.
بعد ذلك، يجب أن يكون websockify متاحًا في طريقك. قم بتشغيل websockify --help
للتأكد من تثبيته بشكل صحيح.
يمكنك أيضًا تشغيل websockify باستخدام Docker أو Podman أو Singularity أو udocker أو وقت تشغيل الحاوية المفضل لديك والذي يدعم صور حاوية OCI.
نقطة الدخول للصورة هي أمر run
.
لبناء الصورة:
./docker/build.sh
بمجرد إنشائه، يمكنك فقط تشغيله بنفس الوسائط التي قد تعطيها لأمر run
والعناية بتعيين تعيينات المنفذ:
docker run -it --rm -p <port>:<container_port> novnc/websockify <container_port> <run_arguments>
على سبيل المثال، لإعادة توجيه حركة المرور من المنفذ المحلي 7000 إلى 10.1.1.1:5902، يمكنك استخدام:
docker run -it --rm -p 7000:80 novnc/websockify 80 10.1.1.1:5902
إذا كنت بحاجة إلى تضمين ملفات، مثل خيارات --web
أو --cert
على سبيل المثال، فيمكنك فقط تحميل الملفات المطلوبة في المجلد /data
ومن ثم يمكنك الرجوع إليها بالطريقة المعتادة:
docker run -it --rm -p 443:443 -v websockify-data:/data novnc/websockify --cert /data/self.pem --web /data/noVNC :443 --token-plugin TokenRedis --token-source myredis.local:6379 --ssl-only --ssl-version tlsv1_2