| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
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).
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);
// 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, peer) {
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);
});var proxy = require('udp-proxy');
var server = proxy.createServer( options );
the proxy always connects outwards with a random port
server.close(callback) closes proxy server.
server.on( 'event' , function ( args ) { });
address object contains:
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 ) { });
proxyMsg( msg, sender, peer, function next ( msg, sender, peer ) { });
The following example will block any message going from the client to the server that has length > 120.
// Following the first example, let's create a DNS-proxy that proxies IPv4 udp-requests to googles IPv6 DNS-server and provide a middleware.
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) {
// messages with longer length will not be relayed, because 'next' will not be invoked.
if (msg.length <= 120) {
next(msg, sender);
}
},
proxyMsg: function(msg, sender, peer, next) {
next(msg, sender, peer);
}
}
};
var server = proxy.createServer(options);
// ..Run node testIPv4 or node testIPv6 to run the tests.
MIT
| Back | FazBrowse Home | New Git URL |