Arpchat - सिर्फ ARP का उपयोग करके एक ही नेटवर्क पर दोस्तों को संदेश भेजने वाला चैट ऐप
(github.com/kognise)- arpchat एक ऐसा टूल है जिसे ARP का उपयोग करके चैट ऐप के रूप में बनाया गया है; ARP का इस्तेमाल कंप्यूटर एक ही नेटवर्क पर मौजूद दूसरे कंप्यूटरों के MAC address खोजने के लिए करते हैं
- यह प्रोजेक्ट उस उपयोग-स्थिति से प्रेरित है जिसमें client-isolated network पर दोस्तों के साथ चैट करना चाहा गया
- ARP के ऊपर एक सरल general-purpose transport protocol लागू किया गया है, जिससे कई दसियों हज़ार अक्षरों तक के संदेश भेजे जा सकते हैं, और इसमें थोड़ी compression भी इस्तेमाल होती है
- इसमें presence discovery और heartbeat system है, जो ऑनलाइन उपयोगकर्ताओं की सूची अपडेट करने के साथ-साथ जुड़ने और निकलने की सूचना देता है
- इंस्टॉलेशन के लिए binary releases page से डाउनलोड की जा सकती है
- Windows पर npcap की आवश्यकता हो सकती है, और इंस्टॉल करते समय
Install Npcap in WinPcap API-compatible Modeविकल्प चुनना होगा - Linux पर
sudo setcap CAP_NET_RAW+ep /path/to/arpchatके जरिए network permission देनी पड़ सकती है
- Windows पर npcap की आवश्यकता हो सकती है, और इंस्टॉल करते समय
- टर्मिनल में binary चलती है, और अगर भेजा गया संदेश अपनी ही स्क्रीन पर दिखे तो इसे सही तरह से काम कर रहा माना जा सकता है
- बिल्ड का परीक्षण नवीनतम unstable Rust पर किया गया है, और Windows बिल्ड के लिए WinPcap Developer's Pack तथा
LIBenvironment variable कोWpdPack/Lib/x64/फ़ोल्डर पर सेट करने की प्रक्रिया आवश्यक है
1 टिप्पणियां
Hacker News की राय
इसे बनाने वाला मैं ही हूं। आज HN पर जो दूसरी चीज़ डाली थी, वह भी मैंने ही बनाई थी (https://news.ycombinator.com/item?id=37062422), और ArpChat को भी साथ में चढ़ा देखकर काफी अजीब/दिलचस्प लगा। शायद किसी ने मेरी प्रोफाइल देखी होगी
यह सच में मजेदार प्रोजेक्ट था, और मैंने networking के बारे में बहुत कुछ सीखा
कुछ समय पहले इसे पूरी तरह offline माहौल में सच में इस्तेमाल करने का मौका भी मिला था, और मजा आया। हालांकि बाद में एक बड़ा bug मिला, जो काफी ज्यादा delay पैदा कर रहा था। उसे ठीक कर दिया है, लेकिन अभी नया build artifact upload नहीं कर पाया हूं, इसलिए अगर आप इसे असली माहौल में test करने की सोच रहे हैं तो source से खुद build करना बेहतर होगा। मजे के लिए username colors और message time भी जोड़ दिए हैं। वादा है, जल्द ही नया release डालूंगा
अगर रुचि हो, तो करीब 1 साल पहले मैंने ArpChat कैसे काम करता है इस पर एक लेख भी लिखा था: https://kognise.dev/writing/arp
code के साथ ऐसे ही खेलते रहो। यह कुछ-कुछ वैसा है जैसा justine tunney ने https://justine.lol/ape.html जैसे कामों में दिखाया है। ऐसे क्षेत्र में गहराई तक जाना जिसे कम ही लोग ठीक से समझते हैं—जैसे compiler binary formats की बारीकियां—फिर “क्या सभी binary formats को एक meta format में जोड़कर सच में सब पर run कराया जा सकता है?” जैसा पागल सवाल पूछना, और फिर ऐसी चीज बना देना जो सच में चलती है
# sudo getcap ./arpchat./arpchat cap_net_raw=ep“error getting channel, might be missing permissions” मिल रहा है
अतिरिक्त: यह error
setcapconfiguration से नहीं, बल्कि arpchat से आ रहा हैमुझे बिल्कुल ऐसी ही चीज चाहिए थी। data link layer की शरारत!
जिन लोगों को Address Resolution Protocol (ARP) नहीं पता, उनके लिए बहुत मोटे तौर पर: यह MAC address (जिसे Ethernet इस्तेमाल करता है) और IP address (जिसे Internet इस्तेमाल करता है) के बीच की missing link है।
routeसे दिखने वाली IP routing table यह तय करती है कि packet आगे किस IP address पर भेजना है, औरarpसे दिखने वाला ARP cache उस IP से जुड़े MAC address को तय करता है। आम तौर पर यह router का local IP address होता हैआजकल सिर्फ यह जानना भी कि ARP मौजूद है, थोड़ा गैर-विशेषज्ञों वाला रहस्यमय ज्ञान माना जाता है, और IPv6 वाला इसका भाई Neighbor Discovery Protocol तो और भी ज्यादा। आधुनिक cloud-based deployments में भले ही इसे अक्सर सीधे न छूना पड़े, लेकिन इसके अस्तित्व की जानकारी होने से पूरे network stack को ऊपर से देखने की समझ कहीं ज्यादा पूरी हो जाती है
arpingयह जांचने में बहुत उपयोगी है कि उसी network segment में कोई device चालू है लेकिन ICMP ping का जवाब नहीं दे रहाtcpdumpया Wireshark dump देखते हुए आप बहुत जल्द इससे टकराएंगे ही। हालांकि software engineers को cloud और traditional networks के काफी अलग होने की वजह से, applications की बजाय home network debug करते समय इससे पहले सामना हो सकता हैARP में arbitrary payload डाला जा सकता है, इसका दुरुपयोग करना मजेदार है, लेकिन networking intro के नजरिए से फिर कहें तो लेखक जिस मुख्य बात पर निर्भर है वह यह सरल fact है कि switch
ff:ff:ff:ff:ff:ffकी ओर जाने वाले packets को पूरे broadcast domain में flood करता हैsuperuser privileges या raw packet permissions के बिना भी L3 broadcast address पर packets भेजने से आम तौर पर L2 में flooding होती है, इसलिए वैसा ही message propagation बनाया जा सकता है। यानी broadcast address पर ping करना मजेदार है
ARP इस्तेमाल करने का कोई खास फायदा नहीं है। साथ ही कई modern switches ARP packets को monitor करने की सुविधा रखते हैं, इसलिए बड़ी मात्रा में fake ARP traffic बहाने से असल में खराब असर पड़ सकता है। फिर भी यह मजेदार काम है, और मुझे अपने सीखने के दिनों में बनाई गई शरारतें याद आ गईं। निजी तौर पर मैं इस उद्देश्य के लिए ICMP का दुरुपयोग करता, और यह आगे के development की दिशा भी हो सकती है। मजेदार project के लिए तालियां
ARP, DNS, HTTP, TLS एक तरफ वे protocols हैं जिन्हें हम सोचते हैं, लेकिन साथ ही वे सब सिर्फ numbers भी हैं। ARP भी HTTP जैसी ही number space तक पहुंचता है। ऐसा नहीं है कि केवल UDP 11-bit bytes इस्तेमाल करता है, या केवल DNS के लिए कोई खास CPU instruction है। आखिर में सब कुछ numbers है। अंत में आप जो numbers चाहें wire में धकेल सकते हैं, और बाकी दुनिया वे numbers लेकर अपना-अपना काम करती रहती है
आज के समय में यह काम नहीं करना चाहिए, लेकिन उस समय naive TCP/IP implementations—यानी काफी सारे—खुशी-खुशी इसमें शामिल हो जाते थे
मुझे ज़्यादातर operating systems में default रूप से built-in protocols का दुरुपयोग करना पसंद है। मुझे ऐसा cross-platform GUI/CLI messaging system नहीं मिला जिसके लिए अलग client software install न करना पड़े, इसलिए मैंने एक मूर्खतापूर्ण नकली Samba share बनाया था जिसमें Finder.app/Explorer.exe/Gnome/KDE में messages देखे जा सकते थे
local network पर netcat call भी ठीक से नहीं चलती थी, और broadcast करने के लिए OS-specific flags में भी फर्क था। तरीका यह था कि file browser में Samba share message देखें, उसे click करें, फिर filename बदलकर 3-line “bulletin board” update करें
https://github.com/jedahan/samba-haiku/blob/master/index.js
यह भी असल में Wi-Fi SSID का इस्तेमाल करके captive portal haiku बनाने वाली चीज़ का reimplementation था
https://github.com/jedahan/haiku-wifi
यह उम्मीद से ज़्यादा मज़ेदार हो सकता है। हम बड़े vendors के hardware पर VLAN का इस्तेमाल करके network अलग कर रहे थे, लेकिन पाया कि ज़्यादातर मामलों में VLAN तो काम कर रहा था, पर ARP traffic leak हो रहा था
machines को अपना सारा traffic router के ज़रिए भेजना चाहिए था, लेकिन कभी-कभी वे ऐसे ARP responses देख लेती थीं जिन्हें उन्हें नहीं देखना चाहिए था, और मान लेती थीं कि दूसरी machine तक सीधे पहुंचा जा सकता है। नतीजा यह हुआ कि ARP cache entry expire होने तक traffic भेजा नहीं जा सकता था, जो काफी सिरदर्द था। vendor इतना बड़ा था कि उसे परवाह नहीं थी, और bug fix करने में भी उसने कोई रुचि नहीं दिखाई
कुछ खास हालात में यह chat app VLAN को पार भी कर सकती है
मेरी पत्नी, बच्चे और मैं ज़्यादातर घर से काम या पढ़ाई करते हैं, इसलिए अक्सर अलग-अलग कमरों में होते हैं। ज़रूरत पड़ने पर एक-दूसरे को messages भेजने के लिए हम BeeBEEP इस्तेमाल करते हैं। server की ज़रूरत नहीं है और Linux client व Windows client दोनों हैं, यही निर्णायक बात थी
यह काफी अच्छी तरह काम करता है, लेकिन laptop के sleep से जागने के बाद LAN पर बाकी लोगों को फिर से देखने के लिए कभी-कभी restart करना पड़ता है। और tray icon से सीधे किसी खास व्यक्ति के लिए message window नहीं खोल पाना मेरी लगभग अकेली शिकायत है। मज़ेदार बिल्ली की photos copy-paste भी कर सकते हैं, और file transfer जैसी कुछ ऐसी features भी हैं जिन्हें मैं इस्तेमाल नहीं करता। यह paid ad नहीं है, बस मैं लंबा बोल गया
https://www.beebeep.net/
high school में मैंने
net sendसे यही किया था और डांट पड़ी थीइसलिए मैंने system administrator username spoof किया (Win9x में यह मुश्किल नहीं था), और एक सख्त warning message भेजा। messages अचानक पूरी तरह रुक गए, तो लगता है वे काफी घबरा गए थे
writeनमस्ते कह रहा हैhttps://en.wikipedia.org/wiki/Write_(Unix)
net sendके लिए domain से connected होना ज़रूरी था, इसलिए शायद यह ARP इस्तेमाल नहीं करता होगाबहुत शानदार। हालांकि TCP/IP OSI model को follow नहीं करता, इसलिए OSI की सूक्ष्म distinctions को जस का तस लागू करना मुश्किल है
ARP को practical तौर पर Stevens वाले TCP/IP model के layer 2.5 के रूप में define किया जा सकता है, इसलिए इसे 2.5 कहना सबसे उचित लगता है। और ARP frames route नहीं होते, इसलिए यह स्पष्ट रूप से L3 नहीं है
उस दौर में जब IPv4 NAT लगभग standard था—आज भी कुछ हद तक है, लेकिन अब IPv6 और CGNAT भी हैं—मैंने NATChat नाम की चीज़ बनाई थी
मूल रूप से यह public IPv4 address के आधार पर chat rooms बनाता था, ताकि उसी network के किसी भी व्यक्ति से chat की जा सके। office में दूसरों के साथ इस्तेमाल करने के लिए यह काफी ठीक था। और office भी उस समय मौजूद चीज़ हुआ करती थी
C++ में बनी एक मिलती-जुलती चीज़ भी है: https://github.com/gbonacini/arpchatcpp