忍者ブログ

ひつ(じのひよこが)プログラミングします。
お仕事や趣味で困ったこととか、何度も「あれ?どうだったかしら」と調べたりしたこととか、作ったものとか、こどものこととかを書きます
★前は週末定期更新でしたが今は不定期更新です

2024/11    10« 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  »12

CIDR のユーティリティ書いた

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

CIDR のユーティリティ書いた

ソースコード

var com = com || {};
com.hiyoko = com.hiyoko || {};
com.hiyoko.util = com.hiyoko.util || {};

com.hiyoko.util.Cidr = function(cidr, ports) {
    var tmp = cidr.split('/');
    this.ports = ports;
    this.length = Number(tmp[1]);
    this.address = tmp[0].split('.').map(function(v){return Number(v)});
    this.bits = this.address.map(function(v){
        var tmp = v.toString(2);
        for(var i = tmp.length; i < 8; i++) {
            tmp = '0' + tmp;
        }
        return tmp;
    }).join('').substr(0, this.length);
};
com.hiyoko.util.Cidr.prototype.isOtherNetwork = function(cidr) {
    var result = [];
    if(Array.isArray(cidr)) {
        result = cidr.filter(function(v) {
            return (! v.bits.startsWith(this.bits));
        }.bind(this));
    } else {
        if(! cidr.bits.startsWith(this.bits)) {
            result.push(cidr);
        }
    }
    return result;
};
com.hiyoko.util.Cidr.prototype.inWhiteList = function(cidr) {
    var result = [];
    if(Array.isArray(cidr)) {
        result = cidr.filter(function(v) {
            return (this.bits.startsWith(v.bits));
        }.bind(this));
        return (result.length > 0);
    } else {
        return this.bits.startWith(cidr.bits);
    }
};
com.hiyoko.util.Cidr.prototype.getDetail = function() {
    return this.address.join('.') + '/' + this.length + ' ' + this.ports;
};
com.hiyoko.util.Cidr.prototype.toString = function() {
    return this.address.join('.') + '/' + this.length;
};

使い方

// 指定したアドレスがプライベートネットワーク内にあるか否か確認する
function isInPrivateNetwork(address) {
  var target = new com.hiyoko.util.Cidr(address + '/32');
  return target.inWhiteList([
    new com.hiyoko.util.Cidr('10.0.0.0/8'),
    new com.hiyoko.util.Cidr('172.16.0.0/12'),
    new com.hiyoko.util.Cidr('192.168.0.0/16')
  ]);
}

なんでつくった

お仕事でこういうフィルタリングをする必要が生じたりしたらしい。

PR

コメント

ただいまコメントを受けつけておりません。

ブログ内検索

P R