udp-proxy
UDP-proxy for node.js version >= 0.10.x (for eariler node versions, use version 0.2.1)
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:
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
};
var server = proxy.createServer(options);
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);
});
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);
});
server.on('message', function (message, sender) {
console.log('message from ' + sender.address + ':' + sender.port);
});
server.on('proxyMsg', function (message, sender, peer) {
console.log('answer from ' + sender.address + ':' + sender.port);
});
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)
port
: number (the port you want to proxy to)
ipv6
: boolean (if the target uses IPv6)
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)
localipv6
: boolean (if you want the server to use IPv6)
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)
timeOutTime
: number the time it takes for socket to time out (in ms)
middleware
: object apply a middleware to the proxy, see Middleware section below.
the proxy always connects outwards with a random port
server.close(callback) closes proxy server.
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, peer
- message is the answer to the message from the user
- sender is the answerer address
- peer is the requesting 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'
address object contains:
address
: string ip-addressfamily
: string IPv6 or IPv4port
: number udp-port
Middleware
Add a middleware object to the proxy to intercept any incoming or outgoing message. Use this if you need to potentially change the message content before it is relayed, or prevent it from sending altogether.
The middleware
object must contain the following functions:
message( msg
, sender
, function next
( msg, sender ) { });
- will be invoked with every message from a peer
sender
to the server. - proxy will only relay the message when
next
is invoked.
proxyMsg( msg
, sender
, peer
, function next
( msg, sender, peer ) { });
- will be invoked with every message from the server
sender
to a peer
. - proxy will only relay the message when
next
is invoked.
Example:
The following example will block any message going from the client to the server that has length > 120.
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,
middleware: {
message: function(msg, sender, next) {
if (msg.length <= 120) {
next(msg, sender);
}
},
proxyMsg: function(msg, sender, peer, next) {
next(msg, sender, peer);
}
}
};
var server = proxy.createServer(options);
Tests
Run node testIPv4
or node testIPv6
to run the tests.
License
MIT