tcp-proxy.js
A TCP Proxy package for NodeJS
Usage
$ npm i tcp-proxy.js --save
Create a new proxy instance
const TCPProxy = require('tcp-proxy.js');
const proxy = new TCPProxy({ port: 9229 });
proxy.createProxy({
forwardPort: 9999,
forwardHost: 'localhost',
});
Create a new proxy instance for a specific IP/Hostname
This will only listen to connections on the specified IP/Hostname, you can have duplicates of ports this way.
const TCPProxy = require('tcp-proxy.js');
const proxy = new TCPProxy({ host: 'localhost', port: 9229 });
proxy.createProxy({
forwardPort: 9999,
forwardHost: 'localhost',
});
Create a new proxy instance with dynamic host:ip
const TCPProxy = require('tcp-proxy.js');
const proxy = new TCPProxy({ host: 'localhost', port: 9229 });
proxy.createProxy({
getForwardInfo: () => ({
host: '127.0.0.1',
port: data.port,
}),
});
End proxy
proxy.end();
Interceptor
proxy.createProxy({
forwardPort: 9999,
interceptor: {
client(chunk) {
// request => proxy server => interceptor.client => forward server
const data = chunk.toString();
const newData = data.replace('GET / ', 'GET /tom ');
return Buffer.from(newData);
},
server(chunk) {
// forward server => interceptor.server => proxy server => response
const data = chunk.toString();
const newData = data.replace('hello tom', 'bello tom');
return Buffer.from(newData);
},
},
});
Async Interceptor
proxy.createProxy({
forwardPort: 9999,
interceptor: {
client(chunk) {
// request => proxy server => interceptor.client => forward server
const data = chunk.toString();
return new Promise(resolve => {
setTimeout(() => {
const newData = data.replace('GET / ', 'GET /tom ');
resolve(Buffer.from(newData));
}, 200);
});
},
},
});
Connection Information
IP, Port of Client, Server and Self
proxy.createProxy({
forwardPort: 9999,
interceptor: {
client(result, encoding, connection) {
console.info('Connection from ', connection.client.ip, ':', connection.client.port, 'to', connection.self.ip, ':', connection.self.port, 'from', connection.server.ip, ':', connection.server.port);
return result
}
},
});
Data size
proxy.createProxy({
forwardPort: 9999,
interceptor: {
server(result, encoding, connection) {
console.log('Connection Size:' + connection.size);
return result
}
},
});
License
MIT