web-dev-qa-db-ja.com

Node.js-すべてのトラフィックをポートAからポートBに転送します

すべてのトラフィックをポート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を実行すると、何も表示されません。誰か提案がありますか?

よろしくお願いします。

17
Eamorr

これが私の試みです:

コマンドラインからの「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から転送するには=> localhost:80

$ node proxy.js 9001 80

またはlocalhost:9001 => otherhost:80

$ node proxy.js 9001 otherhost:80

(これはアンドレイの答えに基づいていました、ありがとう!)

36
joonas.fi

片側に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);
16
Andrey Sidorov

Node.jsモジュールを見たことがありますか Hoxy

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

開発者のREADMEからの簡単な説明:

Hoxyは、node.jsのWebハッキングプロキシであり、Web開発者による使用を目的としています。 hoxyを使用すると、一連の条件付きルールに基づいて、「中間者」として機能し、HTTP要求と応答が流れるときにそれらを変更できます。実行中のプロセスとして、hoxyはそれ以外の場合はスタンドアロンのプロキシサーバーのように動作します。 Hoxyは、Firebugのようなデバッガーを補完する方法として着想を得ました。これにより、クライアントランタイムを操作できますが、基になるHTTP会話は操作できません。

これは、データの低レベルのパケット間検査を探しているのでない限り、かなりうまく機能するはずです。

4
slickplaid