レンズ越しの建物

TCPとは

TCPはHTTP通信の上位レイヤーに位置する通信プロトコルです。

具体的にはOSI参照モデルのトランスポート層にあたるもので、信頼性の高い通信を行うことができます。

今回は、Node.jsを使ってTCPサーバを構築し、Webサイトへのアクセスをリモートで監視・HTTPヘッダをフィルタリングするアプリケーションを作成していきたいと思います。

実装

Nodeには、Netという便利なコアモジュールがあります。そのモジュールを使うことで、簡単にTCPインターフェースを生成できます。

ポート番号の異なる2つのTCPサーバをたてて(一方はHTTPサーバの役割を果たします。)、Event Emitterで両者間の通信を行います。

server.js、monitor.jsファイルを作成しましょう。

server.js

var net = require('net');
//①2つのTCPサーバ間でデータのやり取りをするためのイベントエミッターを設定
var stats = new (require('events').EventEmitter);
//⑤デフォルトのフィルタ文字
var filter = 'User-Agent';

//②HTTPリクエストを受けるサーバをTCPで構築
var fauxHttp = net.createServer(function(socket) {
  socket.write('Hello, TCP \n');
  socket.end();

  socket.on('data', function(data) {
    //③TCPサーバがデータを受け取った場合、stats.emitでデータを送信
    stats.emit('stats', data.toString());
  });
}).listen(8080);

//④HTTPリクエストをフィルタリングするTCPサーバを構築
var moniterInterface = net.createServer(function(socket) {
  //⑤stats.onでデータ受信時のイベントを設定、HTTPリクエストをフィルタリング
  stats.on('stats', function(stats) {
    var header = stats.match(filter + ':') || stats.match('');
    header = header.input.substr(header.index).split('\r\n')[0];
    socket.write(header);
  });
  socket.write('フィルタを指定してください(「User-Agent」など)');
  socket.on('data', function(data) {
    filter = data.toString().replace('\n', '');
    socket.write(filter + 'をフィルタしています...');
  });
}).listen(8081);

monitor.js

var net = require('net');
//①8081ポートに接続してフィルタリングの設定やデータの受信を行う
var client = net.connect(8081, 'localhost', function() {
  process.stdin.resume();
  //②コンソールからの入力を、client(8081ポートのTCPサーバ)にpipeすることでfilterの設定を上書き
  process.stdin.pipe(client);
}).on('data', function(data) {
  console.log(data.toString());
}).on('end', function() {
  console.log('セッションが終了しました。');
});

コンソールでserver.jsとmonitor.jsを実行し、ブラウザでhttp://localhost:8080を開いてみましょう。

sever.jsはHTTPリクエストのUser-Agentヘッダの内容をmonitor.jsに送信します。

monitor.jsでは任意のフィルタリングを設定できます。Monitor.jsを実行中のコンソールで「Accept」と入力すると、Acceptがフィルタ文字として認識され、設定されます。

PROFILE

はじめまして、大阪のWeb制作会社Yuapです。「Yuap(ユアプ)」とは英語で「あなたのプランナー」という、Your Plannerの頭文字をとった社名です。 ホームページ制作|Webシステム開発|Webコンサルティングなどの業務を通じて、みなさまの事業の成長に貢献できるようなプランナーになれるよう、日々チャレンジしております。

※お問い合わせ・お見積りは無料です。 IT|ホームページ|Webシステムのことならなんでもお気軽にご相談ください。お問い合わせはこちらから。