情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

httpモジュールによるHTTPサーバ(2)クライアントに関する情報の取得

2016/08/05

この記事は「httpモジュールによるHTTPサーバ」という連載記事の2つ目の記事です。

その他の記事に関しては下を参照してください。

この記事ではhttpモジュールを使ってクライアントに関する情報の取得を行うHTTPサーバを作成する方法を説明します。

クライアントのIPアドレス

クライアントのIPアドレスを取得するには下のようなモジュールを利用する方法があります。

  • request-ip
  • ipware

request-ipモジュール

requestIp.getClientIp関数を使用します。

var http = require('http');
var requestIp = require('request-ip');

var server = http.createServer(function (req, res) {
    try {
        var ip = requestIp.getClientIp(req);
    }
    finally {
        res.end();
    }
});

第1引数にreqを指定します。

返り値としてクライアントのIPアドレスが文字列として得られます。

ipwareモジュール

ipware関数を使用します。

var ipware = require('ipware');

var ipw = ipware();

返り値としてオブジェクトが得られます。

このオブジェクトのget_ip関数を使用します。

var server = http.createServer(function (req, res) {
    try {
        var ip = ipw.get_ip(req);
    }
    finally {
        res.end();
    }
});

第1引数にreqを指定します。

返り値としてクライアントのIPアドレスがオブジェクトとして得られます。

このオブジェクトは下のようなプロパティを有します。

  • clientIp・・・クライアントのIPアドレスを文字列として格納しています。
  • clientIpRoutable・・・クライアントのIPアドレスがパブリックIPアドレスかプライベートIPアドレスかを真偽値として格納しています。パブリックIPアドレスである場合にはtrueとなり、プライベートIPアドレスである場合にはfalseとなります。

サンプルコード1

クライアントからリクエストを受け取ったらクライアントのIPアドレスを標準出力に出力するHTTPサーバを作成し、起動します。

Enterキーが押されたらサーバを停止し、プログラムを終了します。

クライアントのIPアドレスを取得するためにrequest-ipモジュールを利用します。

http-server-request-ip.js

var http = require('http');
var requestIp = require('request-ip');

var server = http.createServer(function (req, res) {
    try {
        console.log('requested from ' + requestIp.getClientIp(req) + '.');
    }
    catch (err) {
        console.error('unhandled exception has occured.');
        console.error(err);
    }
    finally {
        res.end();
    }
});
server.listen(3000, function () {
    console.log('http server is running...press enter key to exit.');

    process.stdin.on('data', function (data) {
        if (data.indexOf('\n') !== -1) {
            server.close(function () {
                console.log('http server closed.');
                process.exit(0);
            });
        }
    });
});
server.on('error', function (err) {
    console.error(err);
    process.exit(1);
});

使用パッケージ

  • request-ip
    npm install request-ipでインストールします。

実行結果

実行結果の確認のためにcURLを使用しています。

コードを実行するとHTTPサーバが起動します。

C:\work\node>node http-server-request-ip.js
http server is running...press enter key to exit.

cURLを使ってサーバに対してHTTPリクエストを行います。

C:\work\node>curl -v http://localhost:3000/
*   Trying ::1...
* Connected to localhost (::1) port 3000 (#0)
> GET / HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.46.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 10 Jun 2016 12:42:24 GMT
< Connection: keep-alive
< Content-Length: 0
<
* Connection #0 to host localhost left intact

クライアントのIPアドレスが正しく取得できていることが分かります。

C:\work\node>node http-server-request-ip.js
http server is running...press enter key to exit.
requested from ::1.

Enterキーを押すとサーバが停止し、プログラムが終了します。

サンプルコード2

クライアントからリクエストを受け取ったらクライアントのIPアドレスを標準出力に出力するHTTPサーバを作成し、起動します。

Enterキーが押されたらサーバを停止し、プログラムを終了します。

クライアントのIPアドレスを取得するためにipwareモジュールを利用します。

http-server-ipware.js

var http = require('http');
var ipware = require('ipware');

var ipw = ipware();
var server = http.createServer(function (req, res) {
    try {
        var ip = ipw.get_ip(req);
        console.log('requested from ' + ip.clientIp + ' (' + (ip.clientIpRoutable ? 'public' : 'private') + ')' + '.');
    }
    catch (err) {
        console.error('unhandled exception has occured.');
        console.error(err);
    }
    finally {
        res.end();
    }
});
server.listen(3000, function () {
    console.log('http server is running...press enter key to exit.');

    process.stdin.on('data', function (data) {
        if (data.indexOf('\n') !== -1) {
            server.close(function () {
                console.log('http server closed.');
                process.exit(0);
            });
        }
    });
});
server.on('error', function (err) {
    console.error(err);
    process.exit(1);
});

使用パッケージ

  • Node IPware
    npm install ipwareでインストールします。

実行結果

コードを実行するとHTTPサーバが起動します。

C:\work\node>node http-server-ipware.js
http server is running...press enter key to exit.

cURLを使ってサーバに対してHTTPリクエストを行います。

C:\work\node>curl -v http://localhost:3000/
*   Trying ::1...
* Connected to localhost (::1) port 3000 (#0)
> GET / HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/7.46.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 10 Jun 2016 12:49:28 GMT
< Connection: keep-alive
< Content-Length: 0
<
* Connection #0 to host localhost left intact

クライアントのIPアドレスが正しく取得できていることが分かります。

C:\work\node>node http-server-ipware.js
http server is running...press enter key to exit.
requested from ::1 (private).

Enterキーを押すとサーバが停止し、プログラムが終了します。

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js