从CIDR范围检索最大/最小IP
我想从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/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' ]
我正在testingnode.js,但似乎无法得到上述范围工作,因为我想。 任何帮助表示赞赏。
标记
只是为了参考这是正确的cidrToRange代码在JavaScript中:
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('192.168.62.156/27')给出了[“192.168.62.128”,“192.168.62.159”],这正是我们需要的。
回应“卡特·科尔”我改变了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' ]
- Nodejsasynchronous编程 – 为什么需要“asynchronous”模块? 什么是“回拨地狱”/“厄运金字塔”?
- Hapi.jsfile upload如何抓取文件,以便使用imageMagick命令行工具
- 在Karate DSL中,调用一个JavaScript文件返回java.lang.RuntimeException
- 如何在socket.io中locking全局数组
- 骨干 – 未定义的请求正文
- Typescript生成的JavaScript有一个不是函数的函数
- 从Express中调用React视图
- Meteor的服务器端setInterval / clearInterval
- 续集error handling