Node.js - 将所有流量从端口A转发到端口B.

时间:2011-06-27 09:29:06

标签: javascript node.js portforwarding

我正在尝试将所有流量从端口6999转发到端口7000(我知道我可以使用iptables,但我们的想法是使用Node.js进行数据包检查)。

以下是我所熟悉的代码:

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时,什么都没有显示出来。有人有什么建议吗?

非常感谢,

3 个答案:

答案 0 :(得分:32)

这是我的理由:

支持从命令行提供“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)

从localhost转发:9001 =&gt;本地主机:80

$ node proxy.js 9001 80

或localhost:9001 =&gt; OTHERHOST:80

$ node proxy.js 9001 otherhost:80

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

答案 1 :(得分:14)

您需要在一侧拥有createConnection。这是我用来转发流量的脚本

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);

答案 2 :(得分:4)

你看过Node.js模块Hoxy了吗?

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

开发人员自述文件的简要说明:

  

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

除非您正在寻找较低级别的数据包检测数据包,否则这应该可以正常工作。