##v.0.2.0
###by: ok 2013
UDP-proxy for node.js
Supports both IPv6 and IPv4, and bridging in between (see example below).
npm install udp-proxy
udp-proxy has no dependencies beyond node.js itself
// 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);
// Show some nice colors when the server starts
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 + rs);
});
// '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 times out without new messages
server.on('proxyClose', function (details) {
console.log('disconnecting socket from ' + details.peer.address);
});
server.on('proxyError', function (err) {
console.log('ProxyError! ' + err);
});
server.on('error', function (err) {
console.log('Error! ' + err);
});
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)
- default: '0.0.0.0' (::0 if
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)
- default: 0.0.0.0 (::0 if
timeOutTime
: number the time it takes for socket to time out (in ms)- default: 10000 (10s)
- options must be an object consisting of:
the proxy always connects outwards with a random port
server.on('event'
, function (args) { });
'listening'
, details- details is an object with two objects:
- target address
- server address
- details is an object with two objects:
'bound'
, details- details is an object with two objects:
- route address
- peer address
- details is an object with two objects:
'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'
, details- when a socket is closed after no new messages in set timeout
'close'
- self-explanatory
address object contains:
address
: string ip-addressfamily
: string IPv6 or IPv4port
: number udp-port
Run node test
to run the tests.
MIT