An efficient port forwarding utility
- On Windows, nc/ncat/socat.exe can not be trusted because they are not signed.
- I want a prototype so can be easily modified to do more works such as dump, analyse data.
- I want to see connection info CLEARLY which almost not provided by nc/ncat/socat.
- The nc/ncat/socat's port forwarding are low efficiency or can not serve multiple connections.
- I don't want to remember complicated arguments for socat, and also nc which are distribution-dependent.
(You can also install it by npm install -g forward.js
)
Listen at a local port and forward incoming connections to other host:port.
forward.js [localAddress:]port [destHost:]port
Note:
- IPv6 address must be wrapped by square brackets, e.g.[::1]:8080
Forward TCP port 8080 of all interfaces, to a.b.c:9090
forward.js 8080 a.b.c:9090
Forward TCP port 8080 of all IPv4 interfaces to an IPv6 address's 9090 port
forward.js 0.0.0.0:8080 [2001:db8:a0b:12f0::1]:9090
Forward TCP port 8080 of all IPv6 interfaces to 192.168.1.12:9090
forward.js [::]:8080 192.168.1.12:9090
Screenshot:
$ forward.js 9999 www.google.com:80
Using parameters {
"localAddress": "",
"localPort": 9999,
"destHost": "www.google.com",
"destPort": 80
}
Listening at [::]:9999
Incoming connection will be forwarded to [www.google.com]:80
Press ENTER to toggle Log level.
0: No (default)
1: Show connection
2: Dump all req/res data
Log level 1: Show connection
Log level 2: Dump all req/res data
====[::ffff:127.0.0.1]:56618 Connected from [::ffff:127.0.0.1]:56618
====[::ffff:127.0.0.1]:56618 Connect to [www.google.com]:80
====[::ffff:127.0.0.1]:56618 Connected to [216.58.197.4]:80 src [192.168.11.3]:64287
====[::ffff:127.0.0.1]:56618 <REQ>Data:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
GET / HTTP/1.1
====[::ffff:127.0.0.1]:56618 <RES>Data:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
HTTP/1.1 404 Found
...
====[::ffff:127.0.0.1]:56618 <RES>Data:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
...
====[::ffff:127.0.0.1]:56618 <REQ>Ended
====[::ffff:127.0.0.1]:56618 <RES>Ended
Do not worry about the log of listening at ::
(all IPv6 interfaces),
as far as i'v tested, on Windows and Mac OS X, listening at ::
will cause
all IPv4 interfaces being listened either.(called dual-stack).
Test client: (nc-connect.js
is here)
$ nc-connect.js 9999
Connected to 127.0.0.1:9999 source 127.0.0.1:56618
GET / HTTP/1.1
HTTP/1.1 302 Found
...