Skip to content

tewarid/node-udp-forwarder

Repository files navigation

node-udp-forwarder Codacy Badge Maintainability

A simple UDP datagram forwarder / proxy. Akin to socat but multi-platform, extensible, and hackable. Provides a command line interface (CLI) and an API.

Installation

Install using npm

[sudo] npm install [-g] node-udp-forwarder

Forwarding using CLI

Here's a full command line example, but only destination port and address are really required

udpforwarder \
--destinationPort 9903 --destinationAddress 10.211.55.3 \
--protocol udp4 --port 9903 --address 10.211.55.2 \
--multicastAddress 225.0.0.1 \
--forwarderPort 0 --forwarderAddress 10.211.55.2

Listens for source datagrams on port 9903 of interface with IP address 10.211.55.2, and forwards them to destination port 9903 at address 10.211.55.3. Destination address can be a multicast group such as 225.0.0.1.

The source port and address of forwarded datagrams are 0 (any random port number) and 10.211.55.2, respectively. Datagrams received on the random port number are sent to the last known sender of the source datagrams above.

Multicast datagrams arriving at port 9903, of interface 10.211.55.2 on Windows, are also forwarded. Linux and OS X require that the UDP socket be bound to all interfaces, address 0.0.0.0, to be able to listen to multicast.

IP version 4 is chosen here using udp4 but IP version 6 may also be specified using udp6.

Forwarding using API

const udpf = require("node-udp-forwarder");
/**
 * messageAdapter is invoked once per received message and should return an array of transformed messages.
 * it can change the message, omit the message, create new messages, or any combination thereof
 *
 * @param msg the received message buffer
 * @param rInfo the message remote source info 
 * @returns {[*]} an array of string or byte buffers to be forwarded to the destination
 */
function messageAdapter (msg, rInfo) {
  const newMessage = `${msg.toString()}-transformed`;
  return [msg, newMessage];
}


const options = {
    protocol: 'udp4',
    port: 9903,
    address: '10.211.55.2',
    multicastAddress: '225.0.0.1',
    forwarderPort: 0,
    forwarderAddress: '10.211.55.2',
    messageAdapter: messageAdapter, // optional
    created: created
};

var f = udpf.create(4007, '10.211.55.3', options);

function created() {
    console.log(`listening on ${f.address}:${f.port}`);
    console.log(`forwarding from ${f.forwarderAddress}:${f.forwarderPort}`);
}

// call f.end() when done

About

A UDP forwarder/proxy with Node.js

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published