Подтвердить что ты не робот

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

Он просто не работает. Когда я делаю tcpdump на порте 7000, ничего не появляется. У кого-нибудь есть предложения?

Большое спасибо заранее,

4b9b3361

Ответ 1

Вот мой ход:

Поддерживает предоставление "от" и "до" из командной строки и поддерживает удаленные машины.

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

(Это было основано на ответе Андрея, спасибо!)

Ответ 2

вам нужно иметь createConnection с одной стороны. Вот script, который я использую для пересылки трафика

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

Ответ 3

Вы просмотрели модуль Node.js Hoxy?

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

Краткое описание разработчика README:

Hoxy - это веб-хакерский прокси для Node.js, предназначенный для использования веб-разработчиками. Используя hoxy, вы можете действовать как "человек посередине" и изменять HTTP-запросы и ответы по мере их прохождения на основе набора условных правил. В качестве запущенного процесса hoxy в противном случае ведет себя как автономный прокси-сервер. Hoxy был вдохновлен как способ дополнения отладчиков, таких как Firebug, которые позволяют вам управлять временем выполнения клиента, но не основным HTTP-разговором.

Это должно работать очень хорошо, если вы не ищете более низкий уровень, пакет для пакетной проверки данных.