gpt4 book ai didi

javascript - 从 IP 字符串计算 IP 范围等于 x.x.x.x/x

转载 作者:行者123 更新时间:2023-12-01 15:51:06 28 4
gpt4 key购买 nike

给定 IP 字符串(如 x.x.x.x/x),我如何或将如何计算 IP 的范围最常见的情况可能是 198.162.1.1/24但可以是任何东西,因为法律允许的任何东西。

我要带198.162.1.1/24并将其转换为
198.162.1.1 - 198.162.1.124 或任何合法的等效项。所以试图弄清楚如何用 javascript 数学和动态地解决这个问题。

最佳答案

子网的基地址:IP 地址和(和)网络掩码。

最高地址:基地址在网络掩码为零的位置用 1 而不是零填充。

例如:198.162.1.1/24 =>

基地:198.162.1.1 and 255.255.255.0
区块1:198 and 255 = 198
区块2:162 and 255 = 162
第 3 座:1 and 255 = 1
第 4 块:1 and 0 = 0
=> 198.162.1.0。

高:198.162.1.0 or 0.0.0.255
第 1、2 和 3 块是相同的。

第 4 块:255
=> 198.162.1.255

现在一些代码(客户端js):

function getIpRangeFromAddressAndNetmask(str) {
var part = str.split("/"); // part[0] = base address, part[1] = netmask
var ipaddress = part[0].split('.');
var netmaskblocks = ["0","0","0","0"];
if(!/\d+\.\d+\.\d+\.\d+/.test(part[1])) {
// part[1] has to be between 0 and 32
netmaskblocks = ("1".repeat(parseInt(part[1], 10)) + "0".repeat(32-parseInt(part[1], 10))).match(/.{1,8}/g);
netmaskblocks = netmaskblocks.map(function(el) { return parseInt(el, 2); });
} else {
// xxx.xxx.xxx.xxx
netmaskblocks = part[1].split('.').map(function(el) { return parseInt(el, 10) });
}
// invert for creating broadcast address (highest address)
var invertedNetmaskblocks = netmaskblocks.map(function(el) { return el ^ 255; });
var baseAddress = ipaddress.map(function(block, idx) { return block & netmaskblocks[idx]; });
var broadcastaddress = baseAddress.map(function(block, idx) { return block | invertedNetmaskblocks[idx]; });
return [baseAddress.join('.'), broadcastaddress.join('.')];
}

工作jsfiddle: http://jsfiddle.net/kLjdLadv/

缺少验证。你可以自己做。

关于javascript - 从 IP 字符串计算 IP 范围等于 x.x.x.x/x,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32978982/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com