- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试生成一个给定 IP 地址子网的随机 IP 地址。有很多资源可用于生成随机 IP,但我要求它是从特定子网内生成的。
我使用了一个名为 netmask 的 npm 模块- 但是实现绝对不优雅。任何人都可以为此提供一些巧妙的指示吗?
var netmask = require("netmask").Netmask
var block = new netmask('10.0.0.0/24')
console.log(block) // gives block details
var blockSize = block.size - 1 ;
var randomIndex = Math.floor(Math.random() * blockSize ) +1; // generate a random number less than the size of the block
console.log("randomIndex is: " + randomIndex);
block.forEach(function(ip, long, index){
if(index == randomIndex){
console.log('IP: ' + ip)
console.log('INDEX: ' + index)
// cannot break! this is a forEach :(
}
});
最佳答案
这很容易,没有任何额外的依赖,虽然我没有给你一个确切的答案,但我知道如何 IP's work in general以及如何解决您的问题。如果您自己动手,本课会更有值(value)。
我们取 10.0.0.0/20
CIDR例如。让我们将 10.0.0.0
转换为位:
00001010.00000000.00000000.00000000
我们去掉了 20 位,因为这是从左边开始的网络,所以我们为主机留下了 0000.00000000
(。
点在这里只是为了便于阅读):
00001010.00000000.00000000.00000000 Network
XXXXXXXX.XXXXXXXX.XXXX0000.00000000 Strip 20 bits of the subnet
将每个八位字节与剩余位随机打乱,例如我们可以得到 0101.10001010
。避免使用只有 1
的主机 (1111.11111111
),因为它是 broadcast IP ,它仍然是一个有效的 IP,但不适用于主机。将子网部分与主机部分连接起来。我们得到:
// S=Subnet, H=Host
SSSSSSSS.SSSSSSSS.SSSSHHHH.HHHHHHHH
00001010.00000000.00000101.10001010
这是 1010 = 10
和 0
和 101 = 5
和 10001010=138
所以最终地址是 10.0.5.138
既然写起来很有趣,我可以给你我自己的实现,它不涉及任何字符串操作。如您所见,IPv4 地址是一个 2^32
无符号整数。因此我们可以应用基础数学:
let ipv4 = {
random: function (subnet, mask) {
// generate random address (integer)
// if the mask is 20, then it's an integer between
// 1 and 2^(32-20)
let randomIp = Math.floor(Math.random() * Math.pow(2, 32 - mask)) + 1;
return this.lon2ip(this.ip2lon(subnet) | randomIp);
},
ip2lon: function (address) {
let result = 0;
address.split('.').forEach(function(octet) {
result <<= 8;
result += parseInt(octet, 10);
});
return result >>> 0;
},
lon2ip: function (lon) {
return [lon >>> 24, lon >> 16 & 255, lon >> 8 & 255, lon & 255].join('.');
}
};
// unit test
console.log(
"192.168.0.35" === ipv4.lon2ip(ipv4.ip2lon('192.168.0.35')) ?
'Test passed' :
'Test failed'
);
for (let i = 0; i < 5; i++) {
console.log(ipv4.random('10.0.0.0', 8));
}
关于javascript - 从 JS 中的子网生成随机 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53815725/
因此,AWS 中私有(private)子网的目的是使其实例无法从外部世界直接访问。然而,在某些情况下(成功地抵制了“实例”双关语),实例访问互联网很有用。例如,一种这样的用例可能是下载软件更新。 实现
我已经退出虚拟机,我需要更改该虚拟机的虚拟网络/子网。我没有找到任何可以更改的选项,请帮助我。谢谢..! 最佳答案 据我所知,当在 VNet 中创建 NIC 时,它就无法再移动到另一个 VNet。因此
我想导出一些内容,例如 VNET 中存在的子网 View (如门户中显示的那样)。不幸的是,没有选项可以将其导出为 CSV。我在网上找到了可以导出子网路由表和关联子网的 powershell 脚本。我
我的虚拟网络具有以下子网 10.0.0.0/24,我想添加另一个子网,但每次尝试时都会得到:“您的子网不包含在该虚拟网络的同一地址空间内” 如何添加另一个子网? 最佳答案 您可以在虚拟网络中添加子网,
我有 ip 地址列表作为字符串,但该列表中也有一些子网。例如: ...127.0.0.1(这是ip)127.0.0.1/24(这是子网)... 我想检查哪个是ip,哪个是子网。到目前为止我可以过滤 i
我正在尝试使用 ARM 模板部署 Azure 防火墙。该模板在首次部署期间工作正常,并在现有虚拟网络中创建一个子网(根据需要命名为 AzureFirewallSubnet)以及具有公共(public)
我正在尝试使用 ARM 模板部署 Azure 防火墙。该模板在首次部署期间工作正常,并在现有虚拟网络中创建一个子网(根据需要命名为 AzureFirewallSubnet)以及具有公共(public)
我正在尝试编写一个脚本,将大于(不大于/16)大于/24 的子网分解为/24 子网。例如:10.10.10.0/23 应该给我 10.10.10.0/24 和 10.10.11.0/24 我的逻辑是首
我在 Azure VNet 中有两台虚拟机(IP 地址 10.1.0.4 和 10.1.0.5),以及一台通过 VPN 网关连接到 VNet 的计算机(IP 10.3.0.2)。是否可以在内部负载均衡
错误消息 执行terraform apply时收到以下错误消息: 错误:创建/更新虚拟网络“CTI-NETWORK”(资源组“CTI-RESOURCES”)时出错:network.VirtualNet
我无法从不再使用的 VNet 中删除“默认”子网。错误是:“子网默认值由/subscriptions/{guid}/resourceGroups/mpi-prod-westeurope-rg/prov
我在使用 docker-compose 时遇到问题。目前,我的容器堆栈是在它们自己定制的、基于桥接的隔离网络中创建的。 例如当运行 docker-compose -p client1 up -d 时,
我无法从不再使用的 VNet 中删除“默认”子网。错误是:“子网默认值由/subscriptions/{guid}/resourceGroups/mpi-prod-westeurope-rg/prov
如果文件的一个版本在特定子网中具有接口(interface),我想将其复制到服务器,或者如果在该子网中没有接口(interface),则将文件的一个版本复制到服务器。下面是一个工作,但我认为不是最佳解
我是 terraform 新手,想要更改网络上的子网,但遇到了一个奇怪的错误。谷歌什么也没得到。这是我要输入的内容(更改 main.tf 和运行计划后) terraform apply -replac
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我们有 dbs, basion ..等,总共 10 个东西需要分开。 如果我们将它们中的每一个都放入一个单独的子网中,我们总共有 10 个子网,再加上 1 个用于第二个区域以实现高可用性。因此,我们总
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我们有 dbs, basion ..等,总共 10 个东西需要分开。 如果我们将它们中的每一个都放入一个单独的子网中,我们总共有 10 个子网,再加上 1 个用于第二个区域以实现高可用性。因此,我们总
在 IP 为 145.74.217.109 的机器 A 上运行 ServerSocket 时然后尝试使用 IP 为 145.74.219.103 的机器 B 连接到机器 A,但无法连接。但是当使用 I
我是一名优秀的程序员,十分优秀!