udp-proxy

UDP-Proxy for node.js. Supports both IPv6 and v4 (and proxies between them)

npm install udp-proxy
1 downloads in the last day
1 downloads in the last week
33 downloads in the last month

udp-proxy

v.0.2.1

by: ok 2013

UDP-proxy for node.js

Supports both IPv6 and IPv4, and bridging in between (see example below).

Installation

npm install udp-proxy

udp-proxy has no dependencies beyond node.js itself

Usage

Example:

// Let's create a DNS-proxy that proxies IPv4 udp-requests to googles IPv6 DNS-server
var proxy = require('udp-proxy'),
    options = {
        address: '2001:4860:4860::8888',
        port: 53,
        ipv6: true,
        localaddress: '0.0.0.0',
        localport: 53535,
        localipv6: false,
        proxyaddress: '::0',
        timeOutTime: 10000
    };

// This is the function that creates the server, each connection is handled internally
var server = proxy.createServer(options);

// this should be obvious
server.on('listening', function (details) {
    console.log('DNS - IPv4 to IPv6 proxy }>=<{ by: ok 2012');
    console.log('udp-proxy-server ready on ' + details.server.family + '  ' + details.server.address + ':' + details.server.port);
    console.log('traffic is forwarded to ' + details.target.family + '  ' + details.target.address + ':' + details.target.port);
});

// 'bound' means the connection to server has been made and the proxying is in action
server.on('bound', function (details) {
    console.log('proxy is bound to ' + details.route.address + ':' + details.route.port);
    console.log('peer is bound to ' + details.peer.address + ':' + details.peer.port);
});

// 'message' is emitted when the server gets a message
server.on('message', function (message, sender) {
    console.log('message from ' + sender.address + ':' + sender.port);
});

// 'proxyMsg' is emitted when the bound socket gets a message and it's send back to the peer the socket was bound to
server.on('proxyMsg', function (message, sender) {
    console.log('answer from ' + sender.address + ':' + sender.port);
});

// 'proxyClose' is emitted when the socket closes (from a timeout) without new messages
server.on('proxyClose', function (peer) {
    console.log('disconnecting socket from ' + peer.address);
});

server.on('proxyError', function (err) {
    console.log('ProxyError! ' + err);
});

server.on('error', function (err) {
    console.log('Error! ' + err);
});

Methods

var proxy = require('udp-proxy');

  • requires the proxy-module

var server = proxy.createServer( options );

  • .createServer( options ) creates an instance of udp-proxy with the given options
    • options must be an object consisting of:
      • address: string (the address you want to proxy to)
        • default: 'localhost'
      • port: number (the port you want to proxy to)
        • default: 41234
      • ipv6: boolean (if the target uses IPv6)
        • default: false
      • localaddress: string (the interface-addresses to use for the server)
        • default: '0.0.0.0' ( ::0 if localipv6 is set to true)
      • localport: number (the port for the server to listen on)
        • default: 0 (random)
      • localipv6: boolean (if you want the server to use IPv6)
        • default: false
      • proxyaddress: string (if you want to set on which interface the proxy connects out)
        • default: 0.0.0.0 ( ::0 if ipv6 is set to true)
      • timeOutTime: number the time it takes for socket to time out (in ms)
        • default: 10000 (10s)

the proxy always connects outwards with a random port

Events

server.on( 'event' , function ( args ) { });

  • 'listening', details
    • details is an object with two objects:
      • target address
      • server address
  • 'bound', details
    • details is an object with two objects:
      • route address
      • peer address
  • 'message', message, sender
    • message is the payload from user using the proxy
    • sender is the user address
  • 'proxyMsg', message, sender
    • message is the answer to the message from the user
    • sender is the answerer address
  • 'error', err
    • in case of an error err has the error-messages
  • 'proxyError', err
    • if the message could not be proxied err has the error-messages
  • 'proxyClose', peer
    • when a socket is closed after no new messages in set timeout
    • peer is the address of the disconnected client
  • 'close'
    • self-explanatory

address object contains:

  • address: string ip-address
  • family: string IPv6 or IPv4
  • port: number udp-port

Tests

Run node testIPv4 or node testIPv6 to run the tests.

License

MIT

npm loves you