[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
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')
]);
}
お仕事でこういうフィルタリングをする必要が生じたりしたらしい。
ただいまコメントを受けつけておりません。