質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Q&A

3回答

6334閲覧

socket.ioで接続元IPアドレスを制限したい

buibui80

総合スコア1033

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

0グッド

0クリップ

投稿2015/09/08 13:22

接続元URLの制限はoriginで出来る事が分かったのですが、
接続元IPアドレスを制限する方法が分かりません。

socketのconnection後であれば、

  • socket.handshake.headers['x-forwarded-for']
  • socket.handshake.address.address
  • socket.request.headers['x-forwarded-for']
  • socket.request.connection.remoteAddress

のいずれかでIPアドレスを取得して条件分岐させる事は出来るのですが、
あくまでoriginと同様にconnection前に制限したいと考えています。

どなたかご存知でしたらご教授をお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

socket.ioのソースを見てみましたが、
そのような機能はなさそうです。

試していませんが、
無理矢理実現するなら以下の方法で出来るかも知れません。
実装依存なので、socket.ioのバージョンが変わると
動かなくなるかも知れません。

lang

1var socketio = require('socket.io') 2socketio.checkRequest = (function () {  3    var context = socketio; 4    var original = socketio.checkRequest; 5    return function (req, fn) {  6        if (IPアドレスチェックでNG) 7            return fn(null, false); 8        else 9            return original.call(context, req, fn);  10    }; 11})(); 12socketio.listen(8000);

checkRequestはoriginのチェックを行う関数なので、
そのチェックの前にIPアドレスのチェックを入れることで、
やりたいことが実現できるだろうという考えです。
reqにはhttp.IncomingMessageが入るので、
チェックの実装はできるのではと思います。

投稿2015/09/24 06:21

eripong

総合スコア1546

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

buibui80

2015/09/24 06:47

ご返答ありがとうございます。 これです!checkRequestでチェックできますね。 まだ試していませんが試したのちに再度コメント致します。 バージョンの影響につきましても忘れないようにしておきます。
eripong

2015/10/28 13:39

そう言えばこの件、確認されたでしょうか?
guest

0

調べた限りでは socket.io 自体にIPアドレスによる制限を掛ける機能は無さそうです・・・
しかし、socket.io による制御に拘らずとも、サーバーOS自体のパケットフィルタリング機能で弾いてやれば良いのではないでしょうか?
(Androidを含め)Unix系のOSであれば iptables などを使用し、Windows系でも比較的簡単に(デフォルトの機能だけで)制限を掛けられると思います。iOSについてはよく分かりませんが。

投稿2015/09/09 10:18

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

buibui80

2015/09/24 06:05

ご返答ありがとうございます。 やはり機能は無いのですね。 OSのパケットフィルタリングについて調べてみます。
guest

0

Webアプリ内でハンドリングするのではなく、Webサーバ側でハンドリングするのも方法だと思います。
IPアドレス(範囲)によって、

  1. Webアプリの "/hoge" へルーティング
  2. 固定ページへフォワード

など。

投稿2015/09/09 00:58

CharmSystems

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

buibui80

2015/09/09 03:16

ご返答ありがとうございます。 socket.ioはスタンドアローンで動作させているので、 本サーバーにはWebサーバーが存在せずWebアプリを含まない構成になっています。 その為、Webアプリは外部サーバーとなりそこでハンドリングしても socket.ioサーバー自体はIP制限を出来ていない状態になりますので socket.ioのみでIP制限する方法を探している次第になります。 引き続き何かご存知でしたら宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問