Node.js – 将端口A的所有stream量转发到端口B.

我试图转发从端口6999 7000端口(我知道我可以使用iptables,但想法是使用Node.js做一些数据包检查)的所有stream量。

这里是我有sofar的代码:

var net=require('net'); var compress=require('./node-compress/compress'); var ip='172.16.1.224'; var ipPort=6999; var opPort=7000; var output=net.createServer(function(connOut){ var input=net.createServer(function(connIn){ connIn.pipe(connOut); }); input.listen(ipPort,ip); }); output.listen(opPort,ip); 

这似乎并没有工作。 当我在7000端口上做tcpdump时,什么也没有显示出来。 任何人有任何build议?

提前谢谢了,

这是我的去吧:

支持从命令行给出“from”和“to”,并支持远程机器。

 var net = require('net'); // parse "80" and "localhost:80" or even "42mEANINg-life.com:80" var addrRegex = /^(([a-zA-Z\-\.0-9]+):)?(\d+)$/; var addr = { from: addrRegex.exec(process.argv[2]), to: addrRegex.exec(process.argv[3]) }; if (!addr.from || !addr.to) { console.log('Usage: <from> <to>'); return; } net.createServer(function(from) { var to = net.createConnection({ host: addr.to[2], port: addr.to[3] }); from.pipe(to); to.pipe(from); }).listen(addr.from[3], addr.from[2]); 

(另存为proxy.js)

从本地主机转发:9001 => localhost:80

 $ node proxy.js 9001 80 

或者localhost:9001 => otherhost:80

 $ node proxy.js 9001 otherhost:80 

(这是基于安德烈的回答,谢谢!)

你需要在一边有createConnection。 这是我用来转发stream量的脚本

 var net = require('net'); var sourceport = 1234; var destport = 1235; net.createServer(function(s) { var buff = ""; var connected = false; var cli = net.createConnection(destport); s.on('data', function(d) { if (connected) { cli.write(d); } else { buff += d.toString(); } }); cli.on('connect', function() { connected = true; cli.write(buff); }); cli.pipe(s); }).listen(sourceport); 

你有没有看过Node.js模块Hoxy ?

http://www.youtube.com/watch?v=2YLfBTrVgZU

从开发人员的自述文件快速说明:

Hoxy是node.js的一个networking黑客代理,供web开发人员使用。 使用hoxy,您可以充当“中间人”,并根据一组有条件的规则,在HTTP请求和响应stream经时对其进行更改。 作为一个正在运行的进程,hoxy本来就像一个独立的代理服务器。 Hoxy灵感来源于一种补充像Firebug这样的debugging器的方式,它可以让你操纵客户端运行时而不是底层的HTTP对话。

这应该工作得很好,除非你正在寻找一个低层次的数据包到数据包的检查。