Javascript 从CIDR范围检索最大/最小IP
我想从CIDR块获得最大和最小IP-我当前的代码运行良好,除了一些IP在最小值上返回负数。下面是我现有的代码和输出Javascript 从CIDR范围检索最大/最小IP,javascript,node.js,Javascript,Node.js,我想从CIDR块获得最大和最小IP-我当前的代码运行良好,除了一些IP在最小值上返回负数。下面是我现有的代码和输出 function long2ip (proper_address) { // Converts an (IPv4) Internet network address into a string in Internet standard dotted format // // version: 1109.2015 // discuss at: http://phpjs.org/fun
function long2ip (proper_address) {
// Converts an (IPv4) Internet network address into a string in Internet standard dotted format
//
// version: 1109.2015
// discuss at: http://phpjs.org/functions/long2ip
// + original by: Waldo Malqui Silva
// * example 1: long2ip( 3221234342 );
// * returns 1: '192.0.34.166'
var output = false;
if (!isNaN(proper_address) && (proper_address >= 0 || proper_address <= 4294967295)) {
output = Math.floor(proper_address / Math.pow(256, 3)) + '.' +
Math.floor((proper_address % Math.pow(256, 3)) / Math.pow(256, 2)) + '.' +
Math.floor(((proper_address % Math.pow(256, 3)) % Math.pow(256, 2)) / Math.pow(256, 1)) + '.' +
Math.floor((((proper_address % Math.pow(256, 3)) % Math.pow(256, 2)) % Math.pow(256, 1)) / Math.pow(256, 0));
}
return output;
}
function cidrToRange(cidr) {
var range = [2];
cidr = cidr.split('/');
var longIp = ip2long(cidr[0]);
var mask = ((-1 << (32 - cidr[1])));
var longIp = ip2long(cidr[0]);
range[0] = long2ip(longIp & ((-1 << (32 - cidr[1]))));
range[1] = long2ip(longIp + Math.pow(2, (32 - cidr[1])) - 1);
return range;
}
console.log(cidrToRange('157.60.0.0/16')); // returns [ '-99.-196.0.0', '157.60.255.255' ]
console.log(cidrToRange('157.56.0.0/14')); // returns [ '-99.-200.0.0', '157.59.255.255' ]
console.log(cidrToRange('127.0.0.1/8')); // returns [ '127.0.0.0', '128.0.0.0' ]
函数long2ip(正确的地址){
//将(IPv4)Internet网络地址转换为Internet标准点格式的字符串
//
//版本:1109.2015
//讨论地点:http://phpjs.org/functions/long2ip
//+原件:瓦尔多·马尔基·席尔瓦
//*示例1:long2ip(3221234342);
//*返回1:'192.0.34.166'
var输出=假;
如果(!isNaN(正确地址)&(正确地址>=0 | |正确地址响应“Carter Cole”,我通过更改cidrToRange函数以具有不同的起点来解决问题
function cidrToRange(cidr) {
var range = [2];
cidr = cidr.split('/');
var start = ip2long(cidr[0]);
range[0] = long2ip(start);
range[1] = long2ip(Math.pow(2, 32 - cidr[1]) + start - 1);
return range;
}
现在返回:
[ '157.60.0.0', '157.60.255.255' ]
[ '157.56.0.0', '157.59.255.255' ]
[ '127.0.0.1', '128.0.0.0' ]
仅供参考,这是javascript中正确的cidrToRange代码:
function cidrToRange(cidr) {
var range = [2];
cidr = cidr.split('/');
var cidr_1 = parseInt(cidr[1])
range[0] = long2ip((ip2long(cidr[0])) & ((-1 << (32 - cidr_1))));
start = ip2long(range[0])
range[1] = long2ip( start + Math.pow(2, (32 - cidr_1)) - 1);
return range;
}
功能cidrToRange(cidr){
var范围=[2];
cidr=cidr.split('/');
var cidr_1=parseInt(cidr[1])
range[0]=long2ip((ip2long(cidr[0]))和(-1你有没有弄清楚这个问题?后面问的这个问题有更好的答案:注意:这是正确的版本。@mark willis的版本在10.1.0.0/12时失败。返回[“10.1.0.0”、“10.16.255.255]”,而它应该返回[“10.0.0.0.0”、“10.15.255.255”]ip2long
没有定义