1 पॉइंट द्वारा GN⁺ 2025-06-15 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Go-Torrent, Go में बना एक BitTorrent क्लाइंट इम्प्लीमेंटेशन है, जो BitTorrent प्रोटोकॉल का उपयोग करके फ़ाइल डाउनलोड करने की मुख्य सुविधाएँ लागू करता है
  • इम्प्लीमेंटेशन का दायरा .torrent फ़ाइल पार्सिंग, peer discovery, peer communication और फ़ाइल डाउनलोड तक फैला है, और यह single-file तथा multi-file torrent दोनों को संभालता है
  • Bencode string, integer, list और dictionary type को सपोर्ट करता है, और इसमें error handling तथा validation फीचर शामिल हैं
  • डाउनलोड फीचर piece और block management, concurrent download, progress tracking, और block-स्तर के storage management प्रदान करता है
  • प्रोजेक्ट अभी सक्रिय विकासाधीन है, और आगे Magnet link, metadata exchange protocol, तथा DHT support की योजना है

Go-Torrent द्वारा इम्प्लीमेंट की गई सुविधाएँ

  • Go-Torrent Go में लिखा गया एक BitTorrent क्लाइंट इम्प्लीमेंटेशन है
  • यह BitTorrent प्रोटोकॉल का उपयोग करके फ़ाइलें डाउनलोड करने के लिए मुख्य सुविधाएँ लागू करता है
  • प्रमुख इम्प्लीमेंटेशन दायरा इस प्रकार है
    • torrent फ़ाइल parsing
    • peer discovery
    • फ़ाइल डाउनलोड

Bencode और torrent फ़ाइल प्रोसेसिंग

  • Bencode encoding/decoding सभी Bencode type को सपोर्ट करता है
    • string
    • integer
    • list
    • dictionary
  • इसमें error handling और validation शामिल हैं
  • torrent फ़ाइल प्रोसेसिंग .torrent फ़ाइल parsing को सपोर्ट करती है
    • single-file torrent
    • multi-file torrent
  • info hash की गणना और piece hash extraction को सपोर्ट करती है
  • standard torrent फ़ाइल field को सपोर्ट करती है

peer discovery और communication

  • HTTP tracker के माध्यम से peer discovery को सपोर्ट करता है
  • peer handshake protocol को इम्प्लीमेंट करता है
  • पूरा BitTorrent message protocol शामिल है
  • peer connection management प्रदान करता है

डाउनलोड और storage management

  • डाउनलोड फीचर में piece और block management शामिल है
  • एक साथ कई डाउनलोड चलाए जा सकते हैं
  • डाउनलोड progress को track करता है
  • single-file और multi-file torrent दोनों के लिए file assembly को सपोर्ट करता है
  • storage management block-स्तर granularity पर काम करता है

संरचना, आवश्यकताएँ और विकास स्थिति

  • प्रोजेक्ट संरचना निम्न पैकेजों में विभाजित है
    • cmd/: command-line interface और मुख्य application
    • internal/bencode/: Bencode encoding/decoding
    • internal/torrent/: torrent फ़ाइल प्रोसेसिंग
    • internal/tracker/: tracker protocol implementation
    • internal/peer/: peer communication
    • internal/download/: डाउनलोड management
    • pkg/: public package
  • आवश्यकताएँ Go 1.21 या उससे ऊपर हैं
  • इंस्टॉलेशन के लिए repository clone करने के बाद go mod download चलाया जाता है
  • usage documentation प्रोजेक्ट के और mature होने पर जोड़ी जाएगी
  • वर्तमान इम्प्लीमेंटेशन स्थिति checkpoint.md में देखी जा सकती है
  • नियोजित सुविधाएँ इस प्रकार हैं
    • Magnet link support
    • Metadata exchange protocol
    • DHT(Distributed Hash Table) support
  • संदर्भ सामग्री BitTorrent Protocol Specification और Bencode Specification हैं

1 टिप्पणियां

 
GN⁺ 2025-06-15
Hacker News की राय
  • शानदार। बस, इनपुट भरोसेमंद नहीं है, इसलिए bencode decoder में dynamic allocation size को सीमित करना अच्छा रहेगा
    Torrent file या announce response में malicious input string parsing के दौरान बहुत बड़ा allocation मांगकर client को denial of service की स्थिति में धकेल सकता है। अच्छे से बनी torrent में बची हुई input length से लंबी string नहीं हो सकती, इसलिए बची हुई input length को ऊपरी सीमा मानना ठीक लगता है

  • साफ-सुथरा और सरल दिखता है, अच्छा लगा। README में .torrent file को सच में download करने का एक-line usage example डालना अच्छा रहेगा
    उदाहरण: ./go-torrent My-Linux-Distro-Wink-ISO.torrent
    साथ में torrent.ParseFromUrl भी जोड़ दें तो और अच्छा होगा, और ऐसे projects हर किसी को self-practice के तौर पर एक बार करने लायक हैं

  • बढ़िया। codecrafters में एक challenge है जो इस प्रक्रिया में थोड़ी guidance देता है और tests भी देता है। free महीने में थोड़ा किया था, मजेदार लगा
    https://app.codecrafters.io/courses/bittorrent/overview

  • बढ़िया। मैंने भी कभी ऐसा कुछ सोच रखा था। जानना चाहूंगा कि यह कितना मुश्किल था और किस स्तर तक इसे “complete” माना जा सकता है। यह भी उत्सुकता है कि क्या DHT, Magnet, और तरह-तरह की NAT traversal सुविधाएं भी handle करता है
    मैं हमेशा जिस जगह अटकता था, वह यह थी कि असल दुनिया में चल रही ज़्यादातर torrents पर बस काम कर जाने वाला client बनाने के लिए जरूरी features की list क्या है, यह समझ नहीं आता था। torrent से जुड़े protocols दर्जनों लगते हैं, और पूरी list तो दूर, हर एक क्या करता है यह भी ठीक से नहीं पता

    • वाकई मुश्किल था। protocol और bencoding कैसे काम करते हैं, यह सीखने, दिमाग में model बनाने और फिर actual code लिखने में लगभग एक महीना लग गया
      Magnet और DHT अभी add नहीं किए हैं

    • कठिनाई काफी हद तक experience, इस्तेमाल की जा रही programming language से familiarity, और experimentation वाली प्रवृत्ति पर निर्भर करती है। संदर्भ के लिए, मैंने भी पिछले हफ्ते Go में Bittorrent client बनाना शुरू किया, और एक हफ्ते में posted project के करीब 80% तक पहुंच गया
      हालांकि मेरे पास Go का काफी experience है, protocols और networking की अच्छी-खासी जानकारी है, और experimentation लगभग मेरी second nature बन चुका है

      अगर रुचि हो, तो Bittorrent की core specification असल में काफी छोटी है और लगभग एक घंटे में आसानी से पढ़ी-समझी जा सकती है: https://www.bittorrent.org/beps/bep_0003.html

      Bittorrent के “आसपास” protocol extensions जैसी कई चीजें हैं, लेकिन अब तक जो देखा है, उसमें हर client का support level अलग-अलग है। उदाहरण के लिए Protocol Encryption असल में obfuscation के करीब है; पहले उस तरीके से communication की कोशिश करता है और अगर न हो तो settings के हिसाब से normal protocol पर वापस आ जाता है

      किसी website की .torrent file से Linux distribution, जैसे Debian, download करने भर की बात हो तो यह अपेक्षाकृत सीधा है। एक file है, tracker है, normal protocol इस्तेमाल करने वाले peers काफी हैं, और अगर आप NAT के पीछे हैं तो connections receive किए बिना भी कुछ हद तक काम चल सकता है

      स्वाभाविक रूप से जब grey-area content में जाते हैं, तो Magnet links parse करना, DHT से peers ढूंढना, और modem में port अपने-आप map करने के लिए UPnP भी implement करने का मन हो सकता है। फिर भी यह भी iterative तरीके से एक-एक करके बनाया जा सकता है। जितने ज़्यादा features होंगे, उतने ज़्यादा peers मिलने और successful exchange होने की संभावना बढ़ेगी

  • मैं Go developer नहीं हूं, इसलिए पूछ रहा हूं: इतना पुराना Go 1.21 क्यों इस्तेमाल कर रहे हैं? पुराने version पर बने रहने की कोई वजह है?
    Edit: लगता है 10 महीने पहले support बंद हो चुका है

    • Windows 7 support पुराने Go release पर टिके रहने की एक वजह है। Go 1.21.4 या उससे नीचे से बने projects सभी Windows releases और 2009 के बाद बने computers पर चलते हैं, लेकिन v1.21.5 पर जाने से खास फायदा नहीं मिलता और वे केवल ज्यादा recent computers तथा Windows 10/11 पर ही चलने लगते हैं
      https://github.com/golang/go/issues/64622

    • README शायद AI-generated लगता है। असली go.mod file में Go version 1.23.1 लिखा है[1], जिसका मतलब है कि Go 1.23.1 या उससे ऊपर चाहिए[2]
      [1] https://github.com/piyushgupta53/go-torrent-client/blob/6130...

      [2] https://go.dev/doc/modules/gomod-ref#go-notes

  • बहुत बढ़िया। college के दिन याद आ गए। Georgia Tech की networking class के final project में हमने यही किया था
    code तो बहुत पहले खो गया, लेकिन उस समय सीखे lessons आज भी याद हैं। ऐसे projects नई language सीखने का भी अच्छा तरीका हैं

  • try करने लायक project की category है। मैंने भी कुछ similar किया था, और दूसरों के बनाए bencode encoder/decoder देखकर काफी विनम्र हो गया
    language features explore करने का भी अच्छा तरीका है। हालांकि बड़ी libraries के सारे features catch up करने की कोशिश करना काफी व्यर्थ है, और मुझे लगता है client-to-client compatibility पहले से ही कम है

  • उत्सुक हूं कि क्या implementation process पर documentation publish करने की कोई योजना है। व्यक्तिगत तौर पर मुझे code से ज्यादा उसमें दिलचस्पी होगी
    क्योंकि protocol के अलग-अलग पहलुओं को implement करने के approach या process को गहराई से cover करने वाले resources ज्यादा नहीं हैं

  • जानना चाहूंगा कि क्या v2 और mutable torrents भी किए हैं। कृपया कोई तो mutable torrents implement कर दे

  • Magnet links support करता है?
    Edit: अरे, यह planned feature था

    • अभी नहीं। जल्द add करने की योजना है