
bitbang-cli v0.5.0
أنشئ وصولاً آمناً عن بُعد إلى جهاز يتضمن قشرة تفاعلية (shell)، ونقل ملفات، ووكيل ويب عبر WebRTC من نظير إلى نظير بتشفير من الطرف إلى الطرف، باستخدام متصفح أو واجهة سطر أوامر (CLI) دون الحاجة إلى إعادة توجيه المنافذ أو إنشاء حسابات.
BitBang CLI
bitbang هي أداة متعددة الاستخدامات للوصول عن بُعد، عبارة عن ملف ثنائي ثابت واحد. من أي متصفح: يمكنك الحصول على قشرة تفاعلية ومتصفح ملفات للوصول إلى الجهاز البعيد. كما يمكنك الوصول إلى تطبيقات الويب على شبكة ذلك الجهاز. بالإضافة إلى المتصفح، توفر إعادة توجيه منافذ TCP، ونسخ الملفات، ومشاركة الطرفية. لا تتطلب حسابًا أو إعدادًا — إنها تعمل مباشرة.

على الجهاز الذي تريد الوصول إليه:``` curl -sSfL bitba.ng/install | sh bitbang serve
`serve` يطبع عنوان URL. افتحه في أي متصفح وستحصل على طرفية، ومتصفح ملفات، ووكيلًا لشبكة ذلك الجهاز — أو يمكنك الوصول إلى نفس الجهاز من طرفية أخرى باستخدام `bitbang connect <url>`، الذي يضيف إعادة توجيه المنافذ (`-L`) ونسخ الملفات (`bitbang cp`). الاتصال مشفّر من طرف إلى طرف ومن نظير إلى نظير؛ خادم `bitba.ng` يقدّم الطرفين لبعضهما، ثم يتنحى جانبًا.
`bitbang` هو ملف ثنائي واحد ثابت بلغة Go. إنه جزء من [مشروع BitBang](https://github.com/richlegrand/bitbang)؛ وتغطي هذه [الورقة التقنية](https://github.com/richlegrand/bitbang/blob/main/whitepaper.md) التصميم بعمق.
## كيف يقارن
| | ngrok | Tailscale | `bitbang` |
| ------------------------------ | ---------------------- | ------------------------------ | ------------------- |
| الإعداد قبل أول استخدام | حساب + رمز مصادقة | حساب + تسجيل دخول على كل جهاز | **تشغيل أمر واحد** |
| لمشاركة شيء ما، تشغّل | خادم ويب، بالإضافة إلى ngrok | عميلهم على كلا الجهازين | **`bitbang serve`** |
| ما يحصل عليه المتصفح في الطرف البعيد | خادم الويب الذي كنت تشغّله بالفعل | لا شيء — يحتاج إلى عميلهم | **طرفية، ومتصفح ملفات، وتطبيقات ويب على الشبكة البعيدة** |
| مسار البيانات | خوادمهم | P2P (تراجع عبر الترحيل) | **P2P (تراجع عبر الترحيل)** |
| مشفّر من طرف إلى طرف | ليس افتراضيًا | نعم | **نعم** |
## وصفات سريعة
**الوصول إلى خدمة في المنزل**
- [تحميل NAS المنزلي من أي مكان (SMB)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#mount-your-home-nas-from-anywhere-smb)
- [مشاهدة مكتبة الوسائط من أي مكان (Jellyfin)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#watch-your-media-library-from-anywhere-jellyfin)
- [استخدام LLM الخاص بك من أي مكان (Ollama, Open WebUI)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#use-your-own-llm-from-anywhere-ollama-open-webui)
- [فحص كاميرات الأمان (Frigate)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#check-your-security-cameras-frigate)
- [الوصول إلى أتمتة المنزل دون كشفها (Home Assistant)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-your-home-automation-without-exposing-it-home-assistant)
- [الطباعة على طابعة المنزل (IPP, CUPS)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#print-to-your-home-printer-ipp-cups)
**الوصول إلى جهاز**
- [الحصول على قشرة على جهاز خلف NAT](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#get-a-shell-on-a-machine-behind-nat)
- [الحصول على قشرة من هاتفك](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#get-a-shell-from-your-phone)
- [سطح مكتب بعيد إلى جهاز Windows (RDP)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#remote-desktop-into-a-windows-machine-rdp)
- [الوصول إلى سطح مكتب Linux أو Mac (VNC)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-a-linux-or-mac-desktop-vnc)
- [SSH إلى جهاز بدون منفذ مفتوح (OpenSSH)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#ssh-to-a-machine-with-no-open-port-openssh)
- [إعداد Raspberry Pi بدون شاشة](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#set-up-a-headless-raspberry-pi)
**المشاركة مع شخص آخر**
المشاركة تعني ببساطة إعطاء شخص ما عنوان URL فريدًا أو رمز QR يمنحه الوصول. يمكن تخصيص الأذونات وضبطها لتنتهي خلال دقائق أو ساعات، إلخ.
- [مشاركة الملفات دون رفعها إلى أي مكان](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#share-files-without-uploading-them-anywhere)
- [إظهار مشروعك لشخص ما](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#show-someone-your-project)
- [منح شخص ما وصولًا ينتهي](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#give-someone-access-that-expires)
- [التحقق من جلسة الوكيل من هاتفك (Claude Code, tmux)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#check-your-agent-session-from-your-phone-claude-code-tmux)
- [إصلاح جهاز توجيه شخص آخر](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#fix-someone-elses-router)
**التطوير والأجهزة**
- [الوصول إلى قاعدة بيانات من جهاز التطوير (Postgres, MySQL)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#reach-a-database-from-your-dev-machine-postgres-mysql)
- [مزامنة الأجهزة التي لا يمكنها العثور على بعضها (Syncthing)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#sync-devices-that-cannot-find-each-other-syncthing)
- [مشاهدة روبوت من متصفح (ROS, Foxglove)](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#watch-a-robot-from-a-browser-ros-foxglove)
**تقنيات**
- [ما يكشفه مستمع إعادة التوجيه](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#what-a-forwarding-listener-exposes)
- [السماح لأجهزة أخرى على شبكتك المحلية باستخدام إعادة توجيه](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#let-other-machines-on-your-lan-use-a-forward)
- [معروف أنه لا يعمل](https://github.com/richlegrand/bitbang/blob/main/cookbook.md#known-not-to-work)
## استخدام `bitbang`
كل اتصال له طرفان: **مستمع** (`bitbang serve`، يعمل على الجهاز الذي يتم الوصول إليه) و**موصل** (متصفح، أو واجهة سطر الأوامر `bitbang`، على الجهاز الذي يقوم بالوصول). عنوان URL واحد للمستمع يخدم كلا النوعين من الموصلات.
### المستمع: `bitbang serve````
bitbang serve # everything: shell + proxy + files + forward
bitbang serve shell # just a terminal
bitbang serve files ~/share # just a directory (-files-upload to allow uploads)
bitbang serve proxy localhost:8080 # just one web app, straight at the URL
bitbang serve proxy a.lan:80,b.lan:80 # ...or several, chosen in the browser
bitbang serve forward 127.0.0.1:22 # just TCP, for `connect -L`
bitbang serve shell files ~/share proxy nas.lan:8096 # any combination
كل منها يطبع رمز QR وعنوان URL ورمز اقتران. يحدد الوضع ما يمكن للمستمع فعله على الإطلاق: serve shell لا يملك أي تحويل ليمنحه، والمستمع المخصص للتحويل فقط لا يبدأ شلًا أبدًا، لذا لا يوجد شيء يمكن تصعيده إليه.
هناك إعداد افتراضي واحد يستحق المعرفة: التحويل والوكيل يصلان إلى أي مضيف:منفذ يمكن للمستمع الوصول إليه، وليس فقط المضيف الذي كنت تقصده، لذا فإن رابطًا تم توزيعه لقاعدة بيانات يصل أيضًا إلى بقية تلك الشبكة. تسمية الأهداف بعد الكلمة تضيّق النطاق — forward db.internal:5432 يصل إلى ذلك فقط ولا شيء غيره.
مشاركة جلسة قيد التشغيل: bitbang share
يبدأ serve shell شلًا جديدًا. بينما ينشر share جلسة tmux قيد التشغيل بالفعل:```
bitbang share # publish the current tmux session
bitbang share --read-only # publish without a control URL
bitbang share status|stop|rotate
يعود الأمر بعد النشر، لذا فإن `Ctrl-Z`، `bitbang share`، `fg`
يعمل لمهمة قيد التنفيذ بالفعل. يتطلب الاستضافة tmux 3.2+ على Unix أو
WSL. يمكن لعملاء Windows الأصليين فتح عناوين URL لكن لا يمكنهم استضافة مشاركة.
بشكل افتراضي، يطبع الأمر عنواني URL للحامل:
- يمكن لـ **عنوان التحكم** الكتابة بنفس صلاحية لوحة المفاتيح المحلية.
يمكن لجهاز تحكم واحد الاتصال في كل مرة.
- **عنوان العرض** للعرض فقط. يتم إسقاط الإدخال قبل وصوله إلى tmux، و
يمكن لما يصل إلى `--max-viewers` من المشاهدين الاتصال في وقت واحد (الافتراضي 16).
يحذف `--read-only` بيانات اعتماد التحكم بالكامل. يتم الاحتفاظ بحدود المشاهدين
والمتحكمين طوال مدة كل اتصال، حتى قبل فتح قشرة.
تعمل المشاركات حتى يتم إيقافها افتراضيًا؛ يحدد `--ttl` عمرًا (مثل `--ttl 1h`).
عناوين URL للمشاركة مؤقتة ولا تُحفظ أبدًا في `devices.json`. يؤدي `share stop`،
أو انتهاء صلاحية TTL، أو إزالة الجلسة المصدر إلى فصل الأقران البعيدين دون
إيقاف الجلسة المصدر.
إعادة تشغيل `bitbang share` تعيد طباعة عناوين URL للمشاركة الجارية. إذا
مررت علامة تتعارض مع ما هو قيد التشغيل (مثل `--read-only`
ضد مشاركة تحتوي على عنوان تحكم)، فإنه يوضح ذلك بدلاً من
إعادة عناوين URL القديمة؛ يستبدل `bitbang share rotate` المشاركة
بأخرى تستخدم العلامات الجديدة.
يعمل عامل خلفي في جلسة إدارة tmux منفصلة `_bbshare_*`،
لذلك لا يوجد برنامج خفي أو ملف PID لإدارته.
لا تغير المشاركة أي خيارات tmux. مع إعداد tmux الافتراضي `window-size latest`،
تتبع النافذة عميل القراءة-الكتابة النشط؛ لا يزال المشاهد المنفرد يوفر
الحجم الوحيد المتاح. إذا تم تجاوز `window-size`، يبلغ `share` بذلك
لكنه لا يغير تكوين المستخدم.
### منح وصول محدود: `bitbang link`
مستمع واحد، وعنوان URL واحد، وعدد من **روابط الوصول** بقدر ما تحتاج. كل رابط هو
رمز منفصل على نفس عنوان URL، يمنح مجموعة فرعية مما يقدمه المستمع
وينتهي اختياريًا في وقت محدد:```
bitbang link edit # add entries in $EDITOR
bitbang link ls # what you have handed out
bitbang link rm <label> # revoke one
bitbang link qr <label> # its URL and QR code
إدخال هو سطر من JSON في ~/.bitbang/bitbang/links.json. اكتب واحدًا بدون
كود، أعد تحميل المستمع في واجهته، وسيتم إنشاء واحد:```json
[
{"label": "ana", "grant": "files", "expires": "2026-09-01T00:00:00Z"},
{"label": "ben", "grant": "files /srv/photos"},
{"label": "dev", "grant": "shell forward 127.0.0.1:5432"}
]
بما أنك لم تقدم النص الفعلي للترجمة (المحتوى المطلوب ترجمته)، لا يمكنني تنفيذ الترجمة. يرجى تزويدي بالنص الكامل للجزء 11 من 35 باللغة الإنجليزية، وسأقوم بترجمته إلى العربية مع الالتزام بجميع القواعد المحددة.```
0) owner files forward proxy shell
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#_vtQ0JCPe7s
1) ana files expires in 6d
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#T-Ty_HhvLfY
2) ben files /srv/photos
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#L6La8OzBO74
3) dev forward 127.0.0.1:5432 shell
https://bitba.ng/8ach_I7oQk2vBb9xYzT0Lw#8kmI3LYzB7E
owner هو رمز الهوية الخاص بها ويمنح كل ما يقدمه المستمع؛ أرسل
أحد الرموز الأخرى بدلاً منه. تقبل وحدة التحكم إما التسمية أو الرقم المجاور
لها، لذا فإن rm 2 و rm ben يفعلان الشيء نفسه.
يُكتب grant بالكلمات التي يقبلها serve، ولا يمكنه إلا تضييق ما
يقدمه المستمع بالفعل. وهذا يعني أن الرابط ليس مقيدًا باختيار القدرات:
يمكنه تسمية مجلد فرعي من المجلد المشترك، أو مجموعة فرعية من أهداف التوجيه، أو
أمرًا واحدًا لـ shell. احذف grant وسيمنح الرابط كل ما يقدمه المستمع.
اطلب شيئًا خارج نطاق المستمع وترفضه وحدة التحكم بنفس الرسالة التي
كان سيعطيك إياها serve.
التسمية هي ما يحدد الرابط، وليس شروطه، لذا يمكن لشخصين الاحتفاظ بروابط بمنح وانتهاء صلاحية متطابقين ويمكنك مع ذلك إلغاء أحدهما دون المساس بالآخر.
يصل الإلغاء وانتهاء الصلاحية إلى الجلسات المفتوحة بالفعل: يُغلق الاتصال ويُخبر الحامل بالسبب، بدلاً من الصمت. كما يُتقاعد الرمز منتهي الصلاحية بدلاً من إيقافه مؤقتًا — تجديد الإدخال يصدر رمزًا جديدًا، لذا يظل الرابط الذي أرسلته بالفعل معطلاً.
الاقتران برمز من 6 أرقام
عندما لا يمكنك لصق رابط أو مسح رمز QR ضوئيًا، مثلما يحدث عندما تكون على الهاتف، أو على مسافة يمكنك فيها الصراخ، يطبع bitbang serve أيضًا رمز اقتران قصيرًا. يفتح الطرف الآخر bitba.ng/<code> (أو يشغّل bitbang connect <code>)، وتظهر شاشته رقمًا ثانيًا من 6 أرقام، ويقرأ ذلك الرقم لك. تكتبه للموافقة. لا يمكن لجهاز في المنتصف جعل الرقمين متطابقين، ويحفظ الاقتران بيانات اعتماد اتصال الجهاز للمرة القادمة، مثل bitbang connect nas1. إذا كنت تعرف Magic Wormhole، فالشكل مشابه — رمز منطوق يقدم جهازين بشكل آمن.

أحضر خادم TURN الخاص بك
تذهب معظم الاتصالات مباشرة من نظير إلى نظير. عندما يقع الطرفان خلف NAT
لا يسمح بثقب الثقوب، يحتاج حركة المرور إلى مرحّل، وبشكل افتراضي يكون مرحّلنا. يشير -ice-servers
إلى المستمع لاستخدام خادمك الخاص بدلاً من ذلك:```
bitbang serve -ice-servers ~/turn.json
يستلم المستمع الإعدادات ويسلّمها إلى خادم الإشارات عند التسجيل، ويقوم الخادم
بتمريرها إلى أي شخص يتصل — لذا يستخدم الطرفان مرحّلك الخاص ولا يتم إشراك مرحّلنا أبدًا.
أي خادم coturn، أو مزوّد مستضاف مثل Cloudflare أو Twilio، يعمل بشكل جيد.
الملف بصيغة JSON، بأيٍّ من هذه الأشكال الثلاثة التي سلّمها لك مزوّدك:```json
[{"urls": ["turn:turn.example.net:3478"], "username": "user", "credential": "pass"}]
بعد اكتمال التثبيت، يمكنك التحقق من التثبيت عن طريق تشغيل:
toolname --version
يجب أن يعرض هذا رقم الإصدار المثبت. إذا واجهت أي أخطاء، فتأكد من تثبيت جميع التبعيات بشكل صحيح وأن متغيرات البيئة الخاصة بك مضبوطة.
الاستخدام
لبدء استخدام الأداة، قم بتشغيل الأمر التالي:
toolname scan --target example.com
سيقوم هذا بإجراء فحص أساسي على الهدف المحدد. للحصول على خيارات أكثر تقدمًا، راجع:
toolname --help
أمثلة
فيما يلي بعض الأمثلة الشائعة:
# فحص منفذ سريع
toolname scan --target example.com --ports 80,443
# فحص شامل مع تصدير النتائج
toolname scan --target example.com --all --output report.json
# وضع التحديد الصامت
toolname scan --target example.com --silent
التكوين
يمكن تكوين الأداة عبر ملف تكوين يقع في ~/.config/toolname/config.yaml. فيما يلي مثال:
# مثال على ملف التكوين
threads: 10
timeout: 30
user_agent: "ToolName/1.0"
proxy: ""
استكشاف الأخطاء وإصلاحها
إذا واجهت مشكلات، فجرّب الخطوات التالية:
- تحقق من سجلات الأداة في
~/.toolname/logs/ - تأكد من أن لديك أحدث إصدار:
toolname update - أعد تثبيت الأداة إذا استمرت المشكلات
لمزيد من المساعدة، راجع الوثائق أو افتح مشكلة في مستودع GitHub.```json {"ice_servers": [{"urls": "stun:stun.example.net:3478"}]}
Since the input chunk is empty, there is no content to translate. Please provide the actual Markdown content for chunk 19 of 35, and I will translate it into Arabic following all specified rules.```json
{"iceServers": [{"urls": ["turn:turn.example.net:3478"], "username": "u", "credential": "p"}]}
urls تقبل سلسلة نصية أو قائمة؛ username و credential مخصصان لـ TURN ويمكن
حذفهما من إدخال STUN فقط. قد يكون المسار مطلقًا أو نسبيًا أو يبدأ بـ ~. أي ملف
لا يتم تحليله يوقف المستمع عند بدء التشغيل بدلاً من التراجع بصمت.
إذا انتهى جلسة ما بترحيل دون طلب ذلك، فإن bitbang connect يخبرك بذلك
بدلاً من تركك تتساءل عن سبب بطئها. يسجل المستمع ذلك
في كلتا الحالتين (via RELAY)، و -relay / -norelay يفرضان السؤال بطريقة
أو بأخرى عندما تشخّص مسارًا.
جدير بالذكر: الأمر يتعلق بمن يحمل البايتات، وليس من يستطيع قراءتها. لا يرى المرحّل أبدًا سوى نص DTLS المشفر، بما في ذلك نصنا. شغّل مرحّلًا خاصًا بك عندما تحتاج إلى TURN أكثر مما يمكننا توفيره (نحد حاليًا من الوقت).
الاتصال من المتصفح
افتح الرابط. اعتمادًا على ما يتم تقديمه، تحصل على:
- Shell -- طرفية كاملة في الصفحة (ألوان، تغيير حجم، نسخ/لصق).
- Files -- تصفح، معاينة، تنزيل، ورفع.
- Proxy -- اكتب عنوان LAN (
nas.local،192.168.1.10:8080،localhost:3000/admin) واستخدم التطبيق كما لو كنت محليًا. تسجيلات الدخول وملفات تعريف الارتباط والرفع والبث تعمل جميعها.
الاتصال من سطر الأوامر```
bitbang connect # interactive shell bitbang connect -- tail -f /var/log/syslog # one-shot command bitbang connect -L 15432:db.internal:5432 # local TCP forwarding bitbang connect -L 14450:nas.local:445 -L 15900:[fd00::20]:5900 bitbang cp :/var/log/app.log ./app.log # copy files, scp-style bitbang cp - :/tmp/firmware.bin < firmware.bin # stdin/stdout work too
`-L` يمرر **TCP فقط**، مثل `ssh -L`. يرتبط `-L` بـ `127.0.0.1` ما لم تمرر
`-g`، مما يجعل المنفذ المُمرَّر قابلاً للوصول من شبكتك المحلية — وأي شخص
يصل إليه يحصل على ما يصل إليه النفق، دون أي بيانات اعتماد BitBang
أمامه.
يحتاج المستمع إلى `bitbang serve forward` أو `bitbang serve`. افتراضيًا، يصل
رابط `forward` إلى **أي host:port يمكن للمستمع الوصول إليه**، وليس فقط
الذي كنت تقصده، لذا فإن الرابط المُسلَّم لقاعدة بيانات يصل أيضًا إلى بقية
تلك الشبكة. ضيّقه بتحديد ما يمكنه الوصول إليه:```
bitbang serve forward db.internal:5432 # this link reaches one service
كل اتصال أو اقتران ناجح يُحفظ في ~/.bitbang/devices.json، لذا من الآن فصاعدًا يكفي اسم قصير: bitbang connect nas1.
دعم المنصات
ملف تنفيذي واحد لكل منصة، بدون تبعيات وقت التشغيل. كل شيء يعمل في كل مكان باستثناء الصفّين المُشار إليهما أدناه.
| Linux | macOS | Windows | |
|---|---|---|---|
الصدفة، الملفات، الوكيل (bitbang serve) | نعم | نعم | نعم |
إعادة توجيه TCP (-L) | نعم | نعم | نعم |
| روابط الوصول — المنح، الانتهاء، الإلغاء | نعم | نعم | نعم |
| إحضار خادم TURN خاص بك | نعم | نعم | نعم |
| الاقتران برمز من 6 أرقام | نعم | نعم | نعم |
| وحدة تحكم المستمع (Enter) | نعم | نعم | نعم |
bitbang connect, bitbang cp | نعم | نعم | نعم |
| عرض جلسة مشتركة | نعم | نعم | نعم |
استضافة مشاركة (bitbang share) | نعم | نعم | لا * |
| تغيير حجم الطرفية أثناء الاتصال | نعم | نعم | لا ** |
* bitbang share ينشر جلسة tmux، لذا تتطلب الاستضافة توفر tmux —
على Linux أو macOS أو WSL. يمكن لنظام Windows الأصلي مع ذلك فتح روابط المشاركة عبر
bitbang connect.
** لا يلاحظ موصّل Windows تغيير حجم طرفيته، لذا تبقى
الصدفة البعيدة بالحجم الذي بدأت به حتى تعيد الاتصال. يحصل Unix
على ذلك عبر SIGWINCH، الذي لا يوجد له مقابل في Windows.
الأمان
- هوية ذاتية التوثيق. عند أول تشغيل، يولّد
bitbangزوج مفاتيح RSA تحت~/.bitbang/<program>/؛ يُشتق معرّف الجهاز من المفتاح العام، لذا فإن انتحال جهاز يعني إيجاد صورة سابقة ثانية لمعرّفه. - السر لا يلمس الخادم أبدًا. رمز الوصول موجود في جزء عنوان URL (
#…)، الذي لا ترسله المتصفحات أبدًا —bitba.ngيتوسط الاتصال دون أن يرى أبدًا الاعتماد الذي يصرّح به. - تشفير من طرف إلى طرف. كل حركة المرور تمر عبر DTLS الخاص بـ WebRTC. يرى خادم الإشارة المفتاح العام فقط، والمعرّف المشتق، وبيانات الاتصال الوصفية — وليس بياناتك أبدًا. ومرحّل TURN، إن لزم، لا يرى سوى النص المشفر.
- اقتران مُتحقق منه. الرقم المقروء بصوت عالٍ في اقتران الرمز هو سلسلة مصادقة قصيرة (SAS)، تُحسب بشكل مستقل على الطرفين من بصمات DTLS المتفاوض عليها ورقمين عشوائيين ملتزمين — لا يمكن لوسيط في المنتصف، الذي تختلف بصماته بالضرورة، أن يجعل الرقمين متطابقين.
- عنوان URL هو اعتماد حامل. أي شخص يمتلكه يحصل على ما اخترت تقديمه — صدفة، إذا شغّلت
serve shell. شاركه وفقًا لذلك. - رقم PIN اختياري (
--pin) للإعدادات الدائمة أو بدون رأس، ووضع الاستخدام لمرة واحدة (-ephemeral) لهوية جديدة في كل تشغيل. - ما لا يزال الخادم يراه. ليس لا شيء. إنه يتوسط التعارف، لذا يلاحظ عناوين IP للطرفين، ووقت اتصالهما، وحجم ما يتبادلانه. يبقيه التشفير من طرف إلى طرف خارج بياناتك، وليس خارج البيانات الوصفية المحيطة بها — الثقة الدنيا وصف أدق من بدون ثقة.
- المتصفح يثق بالصفحة التي حمّلها. عميل المتصفح هو JavaScript
يقدّمه خادم الإشارة، لذا فتح عنوان URL يعني الثقة بذلك الخادم
في تقديم كود نزيه.
bitbang connectلا يعتمد على ذلك: إنه ملف تنفيذي ثبّته وتحققت من مجموعته الاختبارية. إذا كان هذا الفرق مهمًا لك، فاتصل عبر واجهة الأوامر.
كيف يتحقق الطرفان من بعضهما البعض، بحيث لا يستطيع خادم الإشارة إدخال نفسه في الاتصال، مُغطى بالتفصيل هنا: Trustless Signaling: Authentication Without a Central Authority.
لماذا؟
- لا شيء لفتحه أو إعداده. يعمل من خلف NAT أو CGNAT أو شبكة مقفلة — بدون تغييرات على الموجّه، بدون VPN، بدون برنامج خفي للنفق.
- لا شيء لتثبيته على جانب الاتصال. المتصفح كافٍ. توجد واجهة أوامر عندما تريد البرمجة النصية والأنابيب ونسخ الملفات.
- خاص بالتصميم. حركة المرور هي WebRTC/DTLS، من نظير إلى نظير. لا يراه خادم الإشارة أبدًا؛ وإذا لم يكن المسار المباشر ممكنًا، يحمل مرحّل TURN النص المشفر فقط.
- بدون حساب، بدون تتبع.
لماذا لا نستخدم SSH فقط؟ أو Tailscale؟
إجابة مختصرة: لجهاز يمكنك الوصول إليه عبر SSH بالفعل، أو لأسطول من أجهزتك
الخاصة التي يمكنك التثبيت عليها، استمر في استخدام ما لديك. bitbang مخصص للحالة التي يكون فيها
الطرف البعيد شخصًا وليس جهازًا، أو عندما لا يمكنك تثبيت أي شيء
حيث تجلس. كلا السؤالين مُجاب عنهما بالتفصيل في
FAQ.
التثبيت```
curl -sSfL bitba.ng/install | sh
لينكس وmacOS. يكتشف نظام التشغيل والمعمارية لديك (`amd64`، `arm64`، و`armv7` على لينكس)، ويقوم بتنزيل الملف الثنائي من أحدث [إصدار على GitHub](https://github.com/richlegrand/bitbang-cli/releases)، ويتحقق من SHA-256 الخاص به مقابل ملف `checksums.txt` الخاص بالإصدار، ثم يثبّته في `~/.local/bin/bitbang`.
تُنشر إصدارات Windows كملفات `bitbang-windows-amd64.exe` و
`bitbang-windows-arm64.exe`. قم بتنزيل الملف الثنائي المناسب من صفحة Releases،
وأعد تسميته إلى `bitbang.exe`، ثم ضعه في مسار `PATH` لديك.
**البناء من المصدر:** انظر [أدناه](#building-from-source).
**macOS وGatekeeper.** سطر التثبيت أعلاه غير متأثر: `curl` لا
يضبط سمة `com.apple.quarantine`، لذا فإن الملف الثنائي الذي يجلبه يعمل
بشكل طبيعي. إذا قمت بدلاً من ذلك بتنزيل `bitbang-darwin-arm64` من صفحة Releases
عبر متصفح، فإن macOS يضعه في الحجر الصحي ويرفض فتحه، لأن
الملفات الثنائية للإصدارات غير موقّعة رقمياً. قم بإزالة ذلك باستخدام أيٍّ من الأمرين التاليين:```
xattr -d com.apple.quarantine ./bitbang-darwin-arm64
أو انقر بزر الماوس الأيمن على الملف في Finder واختر فتح، وهو ما يقدم تجاوزًا لمرة واحدة. بدلاً من ذلك، يمكنك البناء من المصدر، وهو ما لا يخضع أبدًا للحجر الصحي.
Windows وSmartScreen. يحدث الشيء نفسه على Windows، ولنفس السبب.
يُرفق تنزيل المتصفح علامة الويب (Mark-of-the-Web)، لذا يُظهر التشغيل الأول
"Windows protected your PC" — اختر مزيد من المعلومات، ثم التشغيل على أي حال.
ملفات الإصدار الثنائية غير موقعة برمجيًا، لذا فهذا أمر متوقع وليس علامة على وجود خطأ.
جلب ملف .exe باستخدام curl أو Invoke-WebRequest في PowerShell لا يُرفق هذه العلامة، وكذلك البناء من المصدر.
خيارات التثبيت
ثبّت إصدارًا محددًا، أو غيّر الموقع، أو اقرأ البرنامج النصي قبل تشغيله:``` curl -sSfL bitba.ng/install | sh -s -- --version 0.5.0 curl -sSfL bitba.ng/install | sh -s -- --prefix /usr/local/bin
curl -sSfL bitba.ng/install -o install.sh && less install.sh && sh install.sh
وسوم الإصدار لا تحتوي على بادئة `v` (`0.5.0`، وليس `v0.5.0`).
### كيف يعمل رابط التثبيت
`bitba.ng/install` هو إعادة توجيه، وليس نصًا برمجيًا مستضافًا. السلسلة:
1. يصل `curl` إلى `https://bitba.ng/install`، والذي يعيد توجيه 302 إلى [`install.sh`](https://github.com/richlegrand/bitbang-cli/blob/HEAD/install.sh) في هذا المستودع (على فرع `main`).
2. يعمل النص البرمجي في الصدفة الخاصة بك، ويكتشف نظام التشغيل والبنية، ثم ينزّل ملف الثنائي من `https://github.com/richlegrand/bitbang-cli/releases/latest/download/bitbang-linux-<arch>`.
3. يجلب `checksums.txt` من نفس الإصدار ويتحقق من SHA-256 للثنائي.
4. يثبّت في `~/.local/bin` (قابل للتجاوز).
يعيش نص التثبيت في هذا المستودع، بجوار الكود الذي يثبّته — لذا يمكنك مراجعته جنبًا إلى جنب مع الثنائي، ومضيف bitba.ng الرسمي يملك فقط الرابط المختصر. يمكن للمستضيفين الذاتيين توجيه `/install` الخاص بمضيفهم إلى أي نص يوزّعونه: متغير البيئة `INSTALL_URL` في خادم الإشارات يتحكم في هدف إعادة التوجيه (فارغ ← 404).
## مرجع الأوامر
كل أمر فرعي وعلامة موجود في **[CLI.md](https://github.com/richlegrand/bitbang-cli/blob/HEAD/CLI.md)**، و`bitbang <command> --help` يطبع نفس المحتوى في الطرفية.
## البناء من المصدر
يتطلب Go 1.25+. Go نقي، مرتبط بشكل ثابت (`CGO_ENABLED=0`) — ترجمة متقاطعة بسيطة، بدون تبعيات وقت التشغيل.```
go build ./cmd/bitbang/
# cross-compile:
GOOS=linux GOARCH=arm64 go build -o bitbang-arm64 ./cmd/bitbang/
GOOS=linux GOARCH=arm GOARM=7 go build -o bitbang-armv7 ./cmd/bitbang/
GOOS=windows GOARCH=amd64 go build -o bitbang.exe ./cmd/bitbang/
GOOS=darwin GOARCH=arm64 go build -o bitbang-macos ./cmd/bitbang/
من موجه أوامر Windows:```bat go build -o bitbang.exe .\cmd\bitbang go test .... run_tests.cmd unit
أوامر الصدفة، ومشاركة الملفات، والوكيل، وعميل CLI مدعومة على
نظام Windows. تستخدم أوامر الصدفة التفاعلية في المتصفح وCLI تقنية Windows ConPTY، بما في ذلك
صدى إدخال الطرفية، وتحرير الأسطر، وإخراج VT، وأحداث تغيير الحجم. يتطلب ConPTY
نظام Windows 10 الإصدار 1809 أو Windows Server 2019 أو أحدث.
## الرسوم البيانية
<p align="center">
<img src="https://assets.kitploit.com/production/public/readmes/47068/d68fcddad62ab84f11a549906a2b5abf2330fb25f39b3c1a1266eac7257a080d.png" alt="صدفة CLI في bitbang ومشاركة الملفات" width="760">
<img src="https://assets.kitploit.com/production/public/readmes/47068/55bb6866c22504a6434e3dee8cb998e747cd73cb9d0bfa5e0bc0ede7b90ce262.png" alt="عملية الوكيل في CLI bitbang" width="720">
</p>
## خارطة الطريق
متاح اليوم: **الصدفة، والملفات، والوكيل**، يمكن الوصول إليها من المتصفح أو CLI، بالإضافة إلى **إعادة توجيه منفذ TCP**، ونسخ الملفات بنمط scp، و**الاقتران المخصص** مع جدول أجهزة محفوظ، و**مشاركة الطرفية** (`bitbang share`)، و**روابط الوصول** (`bitbang link`) التي تضيّق نطاق ما يمنحه الرابط وتحدد مدة صلاحيته. مصمم وقيد التنفيذ:
- **جسر تسلسلي** -- تشغيل `/dev/ttyUSB0` عن بُعد من منفذ افتراضي محلي (مثل تشغيل Arduino IDE عبر الإنترنت). تم فتح قضية [هنا](https://github.com/richlegrand/bitbang-cli/issues/3).
- **سطح مكتب عن بُعد** -- الشاشة عبر مسار فيديو WebRTC، ولوحة المفاتيح/الماوس عبر قناة البيانات.
## الترخيص
MIT -- انظر [LICENSE](https://github.com/richlegrand/bitbang-cli/blob/HEAD/LICENSE).
## المساهمة
نرحب بالقضايا وطلبات السحب.
الوصفات مختلفة: فهي موجودة في [كتاب الطبخ](https://github.com/richlegrand/bitbang/blob/main/cookbook.md)،
في مستودع [bitbang](https://github.com/richlegrand/bitbang)، لأنها تمتد عبر
كل مشروع بدلاً من هذا المشروع فقط. إضافة وصفة هي طلب سحب هناك.
إدراجها *في القائمة* هو طلب سحب صغير ثانٍ لكل مشروع يجب أن يظهر README الخاص به
الوصفة -- قائمة [الوصفات](#recipes) أعلاه تُصان هنا يدويًا. هذا
مقصود: كل مشروع يقرر أي الوصفات تستحق أن تُعرض أمام
قرائه، بدلاً من أن ينمو كل README بكل وصفة.