LoginSignup
1
0

More than 5 years have passed since last update.

node.jsでTCP/IPプロクシサーバー

Last updated at Posted at 2013-06-21

シンプルなTCP/IP proxy serverです。
httpやsmtpなどを中継できます。

tcp_proxy.js
var util = require('util');
var net = require("net");

process.on("uncaughtException", function(e) {
    console.log(e);
});

if (process.argv.length != 5) {
    console.log("引数が正しく入力されていません:" + " <proxy_port> <target_host> <target_port>");
    console.log("example:node tcp_proxy.js 3000 www.google.com 80");
    process.exit();
}

var proxyPort = process.argv[2];
var targetHost = process.argv[3];
var targetPort = process.argv[4];

net.createServer(function (proxySocket) {
    var connected = false;
    var buffers = new Array();
    var targetSocket = new net.Socket();
    targetSocket.connect(parseInt(targetPort), targetHost, function() {
        connected = true;
        if (buffers.length > 0) {
            for (i = 0; i < buffers.length; i++) {
                console.log(buffers[i].toString());
                targetSocket.write(buffers[i]);
            }
        }
    });

    proxySocket.on("error", function (e) {
        targetSocket.end();
    });
    targetSocket.on("error", function (e) {
        console.log("targethostに接続できません " + targetHost + ', port ' + targetPort);
        proxySocket.end();
    });

    proxySocket.on("data", function (data) {
        console.log("send: "+data.toString()); //送信データ
        if (connected) {
            targetSocket.write(data);
        } else {
            buffers[buffers.length] = data;
        }
    });
    targetSocket.on("data", function(data) {
        console.log("rec: " + data.toString());  //受信データ
        proxySocket.write(data);
    });

    proxySocket.on("close", function(had_error) {
        targetSocket.end();
    });
    targetSocket.on("close", function(had_error) {
        proxySocket.end();
    });

}).listen(proxyPort)

使い方

$ node tcp_proxy.js [プロキシポート] [ターゲットホスト] [ターゲットポート]
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0