New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

bittorrent-dht

Package Overview
Dependencies
Maintainers
1
Versions
137
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bittorrent-dht

Simple, robust, BitTorrent DHT implementation

  • 1.5.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
7.9K
decreased by-2.14%
Maintainers
1
Weekly downloads
 
Created
Source

bittorrent-dht build npm npm downloads gittip

Simple, robust, BitTorrent DHT implementation

Node.js implementation of the BitTorrent DHT protocol. BitTorrent DHT is the main peer discovery layer for BitTorrent, which allows for trackerless torrents. DHTs are awesome!

This module is used by WebTorrent.

features

  • complete implementation of the DHT protocol in JavaScript
  • follows the spec
  • robust and well-tested (comprehensive test suite, and used by WebTorrent and peerflix)
  • efficient recursive lookup algorithm minimizes UDP traffic
  • supports multiple, concurrent lookups using the same routing table

install

npm install bittorrent-dht

example

npm install magnet-uri
var DHT    = require('bittorrent-dht')
var magnet = require('magnet-uri')

var uri = 'magnet:?xt=urn:btih:e3811b9539cacff680e418124272177c47477157'
var parsed = magnet(uri)

console.log(parsed.infoHash) // 'e3811b9539cacff680e418124272177c47477157'

var dht = new DHT()

dht.listen(20000, function () {
  console.log('now listening')
})

dht.on('ready', function () {
  // DHT is ready to use (i.e. the routing table contains at least K nodes, discovered
  // via the bootstrap nodes)

  // find peers for the given torrent info hash
  dht.lookup(parsed.infoHash)
})

dht.on('peer', function (addr, hash, from) {
  console.log('found potential peer ' + addr + ' through ' + from)
})

api

dht = new DHT([opts])

Create a new dht instance.

If opts is specified, then the default options (shown below) will be overridden.

{
  nodeId: '',   // 160-bit DHT node ID (Buffer or hex string, default: randomly generated)
  bootstrap: [] // bootstrap servers (default: router.bittorrent.com:6881, router.utorrent.com:6881, dht.transmissionbt.com:6881)
}
dht.lookup(infoHash)

Find peers for the given infoHash. infoHash can be a string or Buffer.

This does a recursive lookup in the DHT. Potential peers that are discovered are emitted as peer events. See the peer event below for more info.

dht.lookup() should only be called after the ready event has fired, otherwise the lookup may fail because the DHT routing table doesn't contain enough nodes.

dht.listen([port], [onlistening])

Make the DHT listen on the given port. If port is undefined, an available port is automatically picked with portfinder.

If onlistening is defined, it is attached to the listening event.

arr = dht.toArray()

Returns the nodes in the DHT as an array. This is useful for persisting the DHT to disk between restarts of a BitTorrent client (as recommended by the spec). Each node in the array is an object with id (hex string) and addr (string) properties.

To restore the DHT nodes when instantiating a new DHT object, simply pass in the array as the value of the bootstrap option.

var dht1 = new DHT()

// some time passes ...

// destroy the dht
var arr = dht1.toArray()
dht1.destroy()

// initialize a new dht with the same routing table as the first
var dht2 = new DHT({ bootstrap: arr })
dht.addNode(addr, [nodeId])

Manually add a node to the DHT routing table. If there is space in the routing table (or an unresponsive node can be evicted to make space), the node will be added. If not, the node will not be added. This is useful to call when a peer wire sends a PORT message to share their DHT port.

If nodeId is undefined, then the peer will be pinged to learn their node id. If the peer does not respond, the will not be added to the routing table.

dht.destroy([callback])

Destroy the DHT. Closes the socket and cleans up large data structure resources.

events

self.on('ready', function () { ... })

Emitted when the DHT is ready to handle lookups (i.e. the routing table contains at least K nodes, discovered via the bootstrap nodes).

self.on('peer', function (addr, infoHash) { ... })

Emitted when a potential peer is found. addr is of the form IP_ADDRESS:PORT. infoHash is the torrent info hash of the swarm that the peer belongs to. Emitted in response to a lookup(infoHash) call.

self.on('node', function (addr) { ... })

Emitted when the DHT finds a new node.

self.on('listening', function () { ... })

Emitted when the DHT is listening.

self.on('warning', function (err) { ... })

Emitted when the DHT gets an unexpected message from another DHT node. This is purely informational.

self.on('error', function (err) { ... })

Emitted when the DHT has a fatal error.

further reading

license

MIT. Copyright (c) Feross Aboukhadijeh.

Keywords

FAQs

Package last updated on 10 Jul 2014

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc