Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/whxaxes/tcp-proxy.js
tcp proxy
https://github.com/whxaxes/tcp-proxy.js
Last synced: 5 days ago
JSON representation
tcp proxy
- Host: GitHub
- URL: https://github.com/whxaxes/tcp-proxy.js
- Owner: whxaxes
- License: mit
- Created: 2017-09-07T09:35:23.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-04-07T02:15:41.000Z (over 1 year ago)
- Last Synced: 2024-11-01T09:51:38.216Z (12 days ago)
- Language: JavaScript
- Size: 39.1 KB
- Stars: 11
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: History.md
- License: LICENSE
Awesome Lists containing this project
README
# tcp-proxy.js
A TCP Proxy package for NodeJS
[![NPM version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Appveyor status][appveyor-image]][appveyor-url]
[![Coverage Status][coveralls-image]][coveralls-url][npm-image]: https://img.shields.io/npm/v/tcp-proxy.js.svg?style=flat-square
[npm-url]: https://npmjs.org/package/tcp-proxy.js
[travis-url]: https://travis-ci.org/whxaxes/tcp-proxy.js
[travis-image]: http://img.shields.io/travis/whxaxes/tcp-proxy.js.svg
[appveyor-url]: https://ci.appveyor.com/project/whxaxes/tcp-proxy.js/branch/master
[appveyor-image]: https://ci.appveyor.com/api/projects/status/github/whxaxes/tcp-proxy.js?branch=master&svg=true
[coveralls-url]: https://coveralls.io/r/whxaxes/tcp-proxy.js
[coveralls-image]: https://img.shields.io/coveralls/whxaxes/tcp-proxy.js.svg## Usage
```bash
$ npm i tcp-proxy.js --save
```### Create a new proxy instance
```js
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.```js
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
```js
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
```js
proxy.end();
```### Interceptor
```js
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
```js
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
```js
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
```js
proxy.createProxy({
forwardPort: 9999,
interceptor: {
server(result, encoding, connection) {
console.log('Connection Size:' + connection.size);
return result
}
},
});
```## License
MIT