
bitbang-cli v0.5.0
ब्राउज़र या CLI का उपयोग करके, बिना पोर्ट फ़ॉरवर्डिंग या खातों के, एंड-टू-एंड एन्क्रिप्टेड पीयर-टू-पीयर WebRTC के माध्यम से इंटरैक्टिव शेल, फ़ाइल स्थानांतरण और वेब प्रॉक्सी के साथ किसी मशीन पर सुरक्षित दूरस्थ पहुँच स्थापित करें।
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) का हिस्सा है; यह [whitepaper](https://github.com/richlegrand/bitbang/blob/main/whitepaper.md) डिज़ाइन को गहराई से कवर करता है।
## इसकी तुलना कैसे होती है
| | ngrok | Tailscale | `bitbang` |
| ------------------------------ | ---------------------- | ------------------------------ | ------------------- |
| पहले उपयोग से पहले सेटअप | खाता + authtoken | खाता + हर डिवाइस पर लॉगिन | **एक कमांड चलाएँ** |
| कुछ साझा करने के लिए, आप चलाते हैं | एक वेब सर्वर, साथ ही 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)
- [अपने LAN पर अन्य मशीनों को फ़ॉरवर्ड का उपयोग करने दें](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` CLI, पहुँचने वाली मशीन पर)। एक लिसनर 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` काम करता है। होस्टिंग के लिए Unix या WSL पर tmux 3.2+ की आवश्यकता होती है। नेटिव Windows क्लाइंट URL खोल सकते हैं लेकिन शेयर होस्ट नहीं कर सकते।
डिफ़ॉल्ट रूप से, कमांड दो bearer URL प्रिंट करता है:
- **Control URL** स्थानीय कीबोर्ड के समान अधिकार के साथ टाइप कर सकता है।
एक समय में केवल एक नियंत्रक कनेक्ट हो सकता है।
- **View URL** केवल देखने के लिए है। इनपुट tmux तक पहुँचने से पहले ही छोड़ दिया जाता है, और
एक साथ अधिकतम `--max-viewers` दर्शक कनेक्ट हो सकते हैं (डिफ़ॉल्ट 16)।
`--read-only` नियंत्रण क्रेडेंशियल को पूरी तरह से हटा देता है। दर्शक और नियंत्रक
सीमाएँ प्रत्येक कनेक्शन के जीवनकाल के लिए बनाए रखी जाती हैं, भले ही वह शेल खोलने से पहले ही क्यों न हो।
शेयर डिफ़ॉल्ट रूप से रुकने तक चलते हैं; `--ttl` एक जीवनकाल निर्धारित करता है (जैसे `--ttl 1h`)।
शेयर URL अस्थायी होते हैं और कभी भी `devices.json` में सहेजे नहीं जाते। `share stop`,
TTL समाप्ति, या स्रोत सत्र को हटाने से दूरस्थ पीयर डिस्कनेक्ट हो जाते हैं बिना
स्रोत सत्र को रोके।
`bitbang share` को फिर से चलाने से चल रहे शेयर के URL फिर से प्रिंट होते हैं। यदि आप
एक ऐसा फ्लैग पास करते हैं जो चल रहे शेयर से मेल नहीं खाता (जैसे किसी शेयर के खिलाफ `--read-only`
जिसमें control URL है), तो यह पुराने URL वापस देने के बजाय ऐसा कहता है;
`bitbang share rotate` शेयर को एक नए से बदल देता है जो नए फ्लैग का उपयोग करता है।
एक बैकग्राउंड वर्कर एक अलग `_bbshare_*` tmux प्रबंधन सत्र में चलता है,
इसलिए प्रबंधित करने के लिए कोई डेमॉन या PID फ़ाइल नहीं है।
शेयरिंग कोई tmux विकल्प नहीं बदलती। tmux के डिफ़ॉल्ट `window-size latest` के साथ,
विंडो सक्रिय read-write क्लाइंट का अनुसरण करती है; एक अकेला दर्शक फिर भी
एकमात्र उपलब्ध आकार प्रदान करता है। यदि `window-size` को ओवरराइड किया गया है, तो `share` इसकी रिपोर्ट करता है
लेकिन उपयोगकर्ता के कॉन्फ़िगरेशन को नहीं बदलता।
### सीमित पहुँच प्रदान करना: `bitbang link`
एक लिसनर, एक URL, और जितने चाहें उतने **access links**। प्रत्येक उसी 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
एक एंट्री ~/.bitbang/bitbang/links.json में 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"}
]
सुरक्षा अनुसंधान और विकास के लिए एक शक्तिशाली उपकरण, जो आपको विभिन्न प्रकार के साइबर हमलों का अनुकरण करने और अपने नेटवर्क की सुरक्षा का परीक्षण करने की अनुमति देता है। यह उपकरण विशेष रूप से पेनिट्रेशन टेस्टिंग और सुरक्षा ऑडिट के लिए डिज़ाइन किया गया है, जिससे आप अपने सिस्टम की कमजोरियों को पहचान सकते हैं और उन्हें दूर कर सकते हैं।```
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 पहचान का अपना कोड है और लिसनर जो कुछ भी serve करता है उसे पूरा अनुदान देता है; इसके बजाय दूसरों में से एक भेजें। कंसोल लेबल या उसके बगल में दिया गया नंबर दोनों स्वीकार करता है, इसलिए rm 2 और rm ben एक ही काम करते हैं।
एक grant उन शब्दों में लिखा जाता है जो serve लेता है, और यह केवल उसे संकीर्ण कर सकता है जो लिसनर पहले से serve करता है। इसका मतलब है कि एक लिंक केवल क्षमताओं को चुनने तक सीमित नहीं है: यह साझा फ़ोल्डर की उपनिर्देशिका, फॉरवर्ड लक्ष्यों का एक उपसमुच्चय, या shell के लिए एक एकल कमांड का नाम दे सकता है। grant छोड़ दें और लिंक वही अनुदान देता है जो लिसनर करता है। लिसनर की पहुंच से बाहर कुछ माँगें और कंसोल उसे उसी संदेश के साथ अस्वीकार कर देता है जो serve आपको देगा।
लेबल ही एक लिंक की पहचान करता है, उसकी शर्तें नहीं, इसलिए दो लोग समान अनुदान और समाप्ति वाले लिंक रख सकते हैं और फिर भी आप एक को रद्द कर सकते हैं बिना दूसरे को छुए।
रद्दीकरण और समाप्ति पहले से खुली सत्रों तक पहुँचती है: कनेक्शन बंद हो जाता है और धारक को कारण बताया जाता है, चुप होने के बजाय। और एक समाप्त कोड रोका नहीं जाता बल्कि सेवानिवृत्त कर दिया जाता है -- एक प्रविष्टि को नवीनीकृत करने से एक नया बनता है, इसलिए आपके द्वारा पहले भेजा गया URL मृत रहता है।
6-अंकीय कोड के साथ पेयरिंग
जब आप URL पेस्ट नहीं कर सकते या 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
लिसनर रजिस्ट्रेशन के समय कॉन्फ़िग signaling सर्वर को सौंप देता है, और सर्वर
इसे जो भी कनेक्ट होता है उसे दे देता है — इसलिए दोनों सिरे आपके relay का उपयोग करते हैं और हमारा कभी शामिल नहीं होता।
कोई भी coturn, या Cloudflare या Twilio जैसा होस्टेड प्रदाता, काम करता है।
फ़ाइल JSON है, इन तीन आकृतियों में से जो भी आपके प्रदाता ने आपको दी हो:```json
[{"urls": ["turn:turn.example.net:3478"], "username": "user", "credential": "pass"}]
मैं देख रहा हूँ कि आपने इनपुट प्रदान नहीं किया है। कृपया वह Markdown सामग्री भेजें जिसे आप अनुवाद करना चाहते हैं (chunk 17/35), और मैं नियमों के अनुसार उसका अनुवाद करूँगा।```json {"ice_servers": [{"urls": "stun:stun.example.net:3478"}]}
मैं आपकी मदद करने के लिए यहाँ हूँ, लेकिन आपने कोई इनपुट प्रदान नहीं किया है। कृपया वह Markdown सामग्री साझा करें जिसे आप अनुवाद करना चाहते हैं, और मैं इसे हिंदी में अनुवाद कर दूँगा।```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 से अधिक की आवश्यकता हो, तो अपना खुद का चलाएं (हम वर्तमान में समय सीमित करते हैं)।
ब्राउज़र से कनेक्ट करना
URL खोलें। जो परोसा जाता है उसके आधार पर, आपको मिलता है:
- शेल -- पृष्ठ में एक पूर्ण टर्मिनल (रंग, आकार बदलना, कॉपी/पेस्ट)।
- फ़ाइलें -- ब्राउज़ करें, पूर्वावलोकन करें, डाउनलोड करें, और अपलोड करें।
- प्रॉक्सी -- एक LAN पता टाइप करें (
nas.local,192.168.1.10:8080,localhost:3000/admin) और ऐप का उपयोग करें जैसे कि आप स्थानीय हों। लॉगिन, कुकीज़, अपलोड, और स्ट्रीमिंग सभी काम करते हैं।
CLI से कनेक्ट करना```
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 के साथ शेयर URL खोल सकता है।
** एक Windows कनेक्टर अपने टर्मिनल के रीसाइज़ होने का पता नहीं लगाता, इसलिए
रिमोट शेल उसी आकार के साथ रहता है जिसके साथ वह शुरू हुआ था जब तक आप दोबारा कनेक्ट नहीं करते। Unix
इसे SIGWINCH से प्राप्त करता है, जिसका Windows में कोई समकक्ष नहीं है।
सुरक्षा
- स्व-प्रमाणित पहचान। पहली बार चलाने पर,
bitbang~/.bitbang/<program>/के अंतर्गत एक RSA कुंजी-जोड़ी उत्पन्न करता है; डिवाइस UID सार्वजनिक कुंजी से व्युत्पन्न होता है, इसलिए किसी डिवाइस की नकल करने का मतलब उसके UID का दूसरा प्रीइमेज खोजना है। - सीक्रेट कभी सर्वर को नहीं छूता। एक्सेस कोड URL फ़्रैगमेंट (
#…) में रहता है, जिसे ब्राउज़र कभी नहीं भेजते --bitba.ngकनेक्शन की मध्यस्थता करता है बिना उस क्रेडेंशियल को कभी देखे जो इसे अधिकृत करता है। - एंड-टू-एंड एन्क्रिप्शन। सारा ट्रैफ़िक WebRTC के DTLS पर चलता है। सिग्नलिंग सर्वर केवल सार्वजनिक कुंजी, व्युत्पन्न UID, और कनेक्शन मेटाडेटा देखता है -- आपका डेटा कभी नहीं। यदि TURN रिले की आवश्यकता हो, तो वह केवल सिफरटेक्स्ट देखता है।
- सत्यापित पेयरिंग। कोड पेयरिंग में ज़ोर से पढ़ा जाने वाला नंबर एक छोटी प्रमाणीकरण स्ट्रिंग (SAS) है, जिसे दोनों सिरों पर स्वतंत्र रूप से बातचीत किए गए DTLS फ़िंगरप्रिंट और दो प्रतिबद्ध नॉन्स से गणना किया जाता है -- एक मशीन-इन-द-मिडिल, जिसके फ़िंगरप्रिंट अनिवार्य रूप से भिन्न होते हैं, दोनों नंबरों को मेल नहीं खिला सकता।
- URL एक बियरर क्रेडेंशियल है। जिसके पास भी यह है, उसे वही मिलता है जो आपने परोसना चुना -- एक शेल, यदि आपने
serve shellचलाया। इसे तदनुसार साझा करें। - वैकल्पिक PIN (
--pin) स्थायी या हेडलेस सेटअप के लिए, और थ्रोअवे मोड (-ephemeral) हर बार चलाने पर एक नई पहचान के लिए। - सर्वर फिर भी क्या देखता है। कुछ भी नहीं नहीं। यह परिचय की मध्यस्थता करता है, इसलिए यह दोनों सिरों के IP पते, वे कब कनेक्ट होते हैं, और वे कितना आदान-प्रदान करते हैं, देखता है। एंड-टू-एंड एन्क्रिप्शन इसे आपके डेटा से बाहर रखता है, उसके आस-पास के मेटाडेटा से नहीं -- न्यूनतम विश्वास विश्वास-रहित से अधिक उचित वर्णन है।
- एक ब्राउज़र उस पेज पर भरोसा करता है जो उसने लोड किया। ब्राउज़र क्लाइंट JavaScript है
जो सिग्नलिंग सर्वर द्वारा परोसा जाता है, इसलिए URL खोलने का मतलब उस सर्वर पर भरोसा करना है कि वह ईमानदार कोड परोसे।
bitbang connectकी ऐसी कोई निर्भरता नहीं है: यह एक बाइनरी है जिसे आपने इंस्टॉल किया और चेकसम किया। यदि यह अंतर आपके लिए मायने रखता है, CLI से कनेक्ट करें।
दोनों सिरे एक-दूसरे को कैसे प्रमाणित करते हैं, ताकि सिग्नलिंग सर्वर स्वयं को कनेक्शन में न डाल सके, इसका विस्तार से वर्णन यहाँ किया गया है: Trustless Signaling: Authentication Without a Central Authority।
क्यों?
- खोलने या कॉन्फ़िगर करने के लिए कुछ नहीं। NAT, CGNAT, या लॉक-डाउन नेटवर्क के पीछे से काम करता है -- कोई राउटर बदलाव नहीं, कोई VPN नहीं, कोई टनल डेमन नहीं।
- कनेक्ट करने वाली तरफ इंस्टॉल करने के लिए कुछ नहीं। एक ब्राउज़र काफी है। एक CLI वहाँ है जब आप स्क्रिप्टिंग, पाइप, और फ़ाइल कॉपी चाहते हैं।
- डिज़ाइन से निजी। ट्रैफ़िक WebRTC/DTLS है, पीयर-टू-पीयर। सिग्नलिंग सर्वर इसे कभी नहीं देखता; यदि सीधा रास्ता संभव नहीं है, तो एक TURN रिले केवल सिफरटेक्स्ट ले जाता है।
- कोई खाता नहीं, कोई टेलीमेट्री नहीं।
SSH का उपयोग क्यों नहीं करते? या Tailscale?
संक्षिप्त उत्तर: एक ऐसी मशीन के लिए जिसमें आप पहले से SSH कर सकते हैं, या अपने खुद के
डिवाइसों के समूह के लिए जिन पर आप इंस्टॉल कर सकते हैं, जो आपके पास है उसका उपयोग करते रहें। bitbang उस समय के लिए है जब
दूर का छोर एक डिवाइस के बजाय एक व्यक्ति हो, या जब आप जहाँ बैठे हैं वहाँ कुछ भी इंस्टॉल नहीं कर सकते। दोनों प्रश्नों के विस्तृत उत्तर FAQ में दिए गए हैं।
इंस्टॉल```
curl -sSfL bitba.ng/install | sh
Linux और macOS। यह आपके OS और arch (`amd64`, `arm64`, और Linux पर `armv7`) का पता लगाता है, नवीनतम [GitHub release](https://github.com/richlegrand/bitbang-cli/releases) से बाइनरी डाउनलोड करता है, release के `checksums.txt` के विरुद्ध इसकी SHA-256 सत्यापित करता है, और `~/.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` विशेषता सेट नहीं करता है, इसलिए यह जो बाइनरी लाता है वह सामान्य रूप से चलता है।
यदि आप इसके बजाय Releases पृष्ठ से ब्राउज़र में `bitbang-darwin-arm64` डाउनलोड करते हैं,
macOS इसे quarantine करता है और इसे खोलने से मना कर देता है, क्योंकि release
बाइनरी notarized नहीं हैं। इसे निम्न में से किसी एक से साफ़ करें:```
xattr -d com.apple.quarantine ./bitbang-darwin-arm64
या Finder में फ़ाइल पर राइट-क्लिक करें और Open चुनें, जो एक बार का ओवरराइड प्रदान करता है। वैकल्पिक रूप से, स्रोत से बिल्ड करें, जो कभी क्वारंटीन नहीं करता।
Windows और SmartScreen। Windows पर भी यही होता है, उसी
कारण से। ब्राउज़र डाउनलोड Mark-of-the-Web जोड़ता है, इसलिए पहली बार चलाने पर
"Windows protected your PC" दिखाई देता है -- More info, फिर Run anyway चुनें।
रिलीज़ बाइनरी कोड-साइन नहीं हैं, इसलिए यह किसी समस्या का संकेत नहीं, बल्कि अपेक्षित है।
.exe को curl या PowerShell के
Invoke-WebRequest से प्राप्त करने पर यह अटैच नहीं होता, और न ही स्रोत से बिल्ड करने पर।
इंस्टॉल विकल्प
कोई संस्करण पिन करें, स्थान बदलें, या चलाने से पहले स्क्रिप्ट पढ़ें:``` 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` नहीं)।
### इंस्टॉल URL कैसे काम करता है
`bitba.ng/install` एक रीडायरेक्ट है, होस्ट की गई स्क्रिप्ट नहीं। श्रृंखला:
1. `curl` `https://bitba.ng/install` को हिट करता है, जो इस रिपो (में `main` पर) में [`install.sh`](https://github.com/richlegrand/bitbang-cli/blob/HEAD/install.sh) पर 302 करता है।
2. स्क्रिप्ट आपके शेल में चलती है, OS+arch का पता लगाती है, और `https://github.com/richlegrand/bitbang-cli/releases/latest/download/bitbang-linux-<arch>` से बाइनरी एसेट डाउनलोड करती है।
3. यह उसी रिलीज़ से `checksums.txt` लाती है और बाइनरी के SHA-256 को सत्यापित करती है।
4. `~/.local/bin` में इंस्टॉल करती है (ओवरराइड करने योग्य)।
इंस्टॉल स्क्रिप्ट इस रिपो में, उस कोड के बगल में रहती है जिसे वह इंस्टॉल करती है — ताकि आप इसे बाइनरी के साथ समीक्षा कर सकें, और कैनोनिकल bitba.ng होस्ट के पास केवल छोटा URL होता है। सेल्फ-होस्टर अपने होस्ट के `/install` को किसी भी स्क्रिप्ट पर इंगित कर सकते हैं जो वे भेजते हैं: सिग्नलिंग सर्वर का `INSTALL_URL` env var रीडायरेक्ट लक्ष्य को नियंत्रित करता है (खाली → 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/
From Windows Command Prompt:
विंडोज़ कमांड प्रॉम्प्ट से:```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="bitbang CLI शेल और फ़ाइल साझाकरण" width="760">
<img src="https://assets.kitploit.com/production/public/readmes/47068/55bb6866c22504a6434e3dee8cb998e747cd73cb9d0bfa5e0bc0ede7b90ce262.png" alt="bitbang CLI प्रॉक्सी संचालन" width="720">
</p>
## रोडमैप
आज उपलब्ध: **शेल, फ़ाइलें, और प्रॉक्सी**, ब्राउज़र या CLI से पहुंच योग्य, साथ ही **TCP पोर्ट फ़ॉरवर्डिंग**, scp-शैली फ़ाइल कॉपी, सहेजी गई डिवाइस तालिका के साथ **एड-हॉक पेयरिंग**, **टर्मिनल साझाकरण** (`bitbang share`), और **एक्सेस लिंक** (`bitbang link`) जो URL द्वारा दी गई पहुंच को सीमित और समाप्त करते हैं। डिज़ाइन किया गया और आने वाला:
- **सीरियल ब्रिजिंग** -- स्थानीय वर्चुअल पोर्ट से दूरस्थ `/dev/ttyUSB0` चलाएं (जैसे इंटरनेट पर Arduino IDE चलाना)। एक इश्यू [यहाँ](https://github.com/richlegrand/bitbang-cli/issues/3) खोला गया है।
- **रिमोट डेस्कटॉप** -- WebRTC वीडियो ट्रैक पर स्क्रीन, डेटा चैनल पर कीबोर्ड/माउस।
## लाइसेंस
MIT -- देखें [LICENSE](https://github.com/richlegrand/bitbang-cli/blob/HEAD/LICENSE)।
## योगदान
इश्यू और PR का स्वागत है।
रेसिपी अलग हैं: वे [cookbook](https://github.com/richlegrand/bitbang/blob/main/cookbook.md) में रहती हैं,
[bitbang](https://github.com/richlegrand/bitbang) रिपॉजिटरी में, क्योंकि वे इस प्रोजेक्ट के बजाय हर प्रोजेक्ट में फैली हुई हैं। रेसिपी जोड़ना वहाँ एक PR है।
इसे *सूचीबद्ध* करवाना प्रति प्रोजेक्ट एक दूसरा, छोटा PR है जिसका README इसे सतह पर लाना चाहिए -- ऊपर दी गई [रेसिपी](#recipes) सूची यहाँ हाथ से बनाए रखी जाती है। यह जानबूझकर है: प्रत्येक प्रोजेक्ट तय करता है कि कौन सी रेसिपी अपने पाठकों के सामने रखने लायक हैं, बजाय हर README में हर रेसिपी जोड़ने के।