我一直在寻找一些C#代码来将CIDR表示法(72.20.10.0/24)中的网络转换为IP地址范围,没有太多运气.stackoverlow上有一些关于CIDR的线程,但似乎没有任何C#代码可以覆盖我需要的内容.所以我决定自己做饭,我不希望代码依赖System.Net进行此版本的任何转换.
也许它可能对某人有所帮助.
参考文献:
来自http://www.laffeycomputer.com/whatmask.html的 "Whatmask"C代码
用法:
uint startIP, endIP;
Network2IpRange("72.20.10.0/24", out startIP, out endIP);
Run Code Online (Sandbox Code Playgroud)
代码假设一切都是32位.
static void Network2IpRange(string sNetwork, out uint startIP, out uint endIP)
{
uint ip, /* ip address */
mask, /* subnet mask */
broadcast, /* Broadcast address */
network; /* Network address */
int bits;
string[] elements = sNetwork.Split(new Char[] { '/' });
ip = IP2Int(elements[0]);
bits = Convert.ToInt32(elements[1]);
mask = ~(0xffffffff >> bits);
network = ip & mask;
broadcast = network + ~mask; …
Run Code Online (Sandbox Code Playgroud) 我已经完成了在python(3.1)中创建一个函数的任务,该函数将采用CIDR表示法并返回可能的ip地址列表.我查看了python.org并发现了这个:http://docs.python.org/dev/py3k/library/ipaddr.html
但我还没有看到任何可以满足这种需求的东西......我会非常感激任何人都愿意帮助我的方式.提前致谢.:-)
给定两个CIDR地址为192.168.2.0/14和192.168.2.0/32
如何在"python2.6"中检查两个ip地址是否重叠?
我已通过netaddr,它允许检查192.168.2.0是否在CIDR地址192.168.2.0/14中
from netaddr import IPNetwork, IPAddress
bool = IPAddress("192.168.2.0") in IPNetwork("192.168.2.0/14"):
Run Code Online (Sandbox Code Playgroud)
但是如何检查两个CIDR地址?
我找到了一个引用:: 如何在python中检查ip是否在网络中
我已经配置了一个由Amazon EC2使用的VPC(非默认).
我需要在具有不同可用区的同一VPC中创建另一个子网(非默认).
因此,当我尝试添加详细信息时,我被困在CIDR块中.尝试为CIDR设置不同的IP时,我收到2个错误.
CIDR块192.168.250.225/16与来自子网6afacb2c(192.168.0.0/16)的预先存在的CIDR块192.168.0.0/16重叠.AvtarSingh公共子网.
192.167.250.225/16不在192.168.0.0/16的范围内
我尝试了许多我能想到的组合,但没有一个能为我工作.
对不起,我对CIDR知之甚少.那么你能为我提供当前配置的正确CIDR吗?现在,我只想设置开发环境,以便检查.
以下是当前的VPC和子网详细信息:
VPC
VPC ID: vpc-8fe804ea | AvtarSingh VPC
Network ACL: acl-406a8725
State: available
Tenancy: Default
VPC CIDR: 192.168.0.0/16
DNS Resolution: yes
DHCP Options Set: dopt-0d6a7c6f
DNS Hostnames: yes
Route Table: rtb-18739f7d
Run Code Online (Sandbox Code Playgroud)子网
Subnet ID: subnet-6afacb2c | AvtarSingh Public Subnet
Availability Zone: us-west-2c
CIDR: 192.168.0.0/16
Route Table: rtb-1b739f7e
State: available
Network ACL: acl-406a8725
VPC: vpc-8fe804ea (192.168.0.0/16) | AvtarSingh VPC
Default Subnet: no
Available IPs: 65530
Run Code Online (Sandbox Code Playgroud)如何使用netaddr
库将ipv4子网掩码转换为cidr表示法?
例: 255.255.255.0 to /24
我正在寻找创建一个将ipv6范围或cidr作为输入的脚本,并吐出一个/ 64块列表(或每个/ 64块中的第一个IP).
我有一个功能,可以为IPv4 IP做类似的事情,但我缺乏理解为ipv6重新使用它.
Function BreakTo30($CIDR)
{
$CIDR = explode("/", $CIDR); // this breaks the CIDR block into octlets and /notation
$octet = ip2long($CIDR[0]); //turn the first 3 octets into a long for calculating later
$NumberOf30s = pow(2,(30-$CIDR[1]))-1; //calculate the number of /30s in the CIDR block
$OutputArray = array();
for ($i=-4; $i<4 * $NumberOf30s; $OutputArray[] = (long2ip($octet + ($i += 4)))); //fancy math to output each /30
return $OutputArray; //returns an array of ranges
}
Run Code Online (Sandbox Code Playgroud)
ip2long和long2ip只是ipv4.
我想找到一种方法来执行SQL查询,该查询将计算存储在数据库中的子网掩码的cidr(位表示).例如,我有255.255.255.0或其十进制值(4294967040)存储在数据库中.我想通过查询进行选择并返回/ 24表示.
我做了以下的事情来确定子网的最后一个IP,所以我希望做类似的事情来确定一个掩码的cidr表示.
select concat(inet_ntoa(ip_addr),'-',
inet_ntoa(ip_addr+(POWER(2,32)-ip_mask-1))) range
from subnets
order by ip_addr
Run Code Online (Sandbox Code Playgroud)
最好这是一个可以在mysql,postgres,oracle等下工作的SQL语句.
我在 AWS 上使用 IPV4 CIDR 块创建了一个 VPC(公共和私有子网)10.0.0.0/26
(即它可以有 2^6 = 64 个 IP 地址以及一个子网地址和一个广播地址)。我想创建以下两个子网,但Must be valid Ipv4 CIDR
出现错误:
10.0.0.0/28
CIDR 块的公共子网,以及10.0.0.8/28
CIDR 块的私有子网如果我提供子网掩码 as/28
并且我想将地址分成两个子网,则地址将落入 range 10.0.0.0 [10.0.0.00000000] - 10.0.0.15 [10.0.0.00001111]
。另一方面,如果我将 CIDR 块设置为10.0.0.16/28
,则不会出现任何错误。为什么 AWSMust be valid Ipv4 CIDR
在 CIDR 块中给出错误为10.0.0.8/28
?
我们正在调整我们的应用程序CloudFormation模板以使用VPC.在此模板中,我们需要以编程方式生成用于VPC子网的CIDR块,以确保它们不会在CloudFormation堆栈之间发生冲突.
我最初的计划是通过将字符串连接在一起来生成CIDR,例如:
"ProxyLoadBalancerSubnetA" : {
"Type" : "AWS::EC2::Subnet",
"Properties" : {
"VpcId" : { "Ref" : "Vpc" },
"AvailabilityZone" : "eu-west-1a",
"CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, "0.0/24" ] ] }
}
},
Run Code Online (Sandbox Code Playgroud)
然而,在进一步考虑之后,我们需要使用单个VPC,而不是为每个堆栈使用VPC.
AWS限制VPC使用最大的/16
CIDR块(我们已经要求提高此限制,但显然不可能).这意味着我们不再可能使用此连接方法,因为我们的每个堆栈都需要总共超过255个地址的子网.
我想在运行中生成CIDR块,而不必将它们定义为CloudFormation模板的参数,
我有一个想法是每个堆栈都有一个"基本整数",并为每个子网的CIDR块添加.
例如:
"CidrBlock" : { "Fn::Join" : [ ".", [ { "Ref" : "VpcCidrPrefix" }, { "Fn::Sum", [ { "Ref" : "VpcCidrStart" }, 3 ] }, "0/24 ] ] }
Run Code Online (Sandbox Code Playgroud)
其中VpcCidrStart
是一个整数,用于设置第三个CIDR八位字节应在脚本中开始的值,并且3
是子网号. …
我正在启动一个kubernetes集群:
kubeadm init --pod-network-cidr=192.168.1.0/16 --apiserver-advertise-address=192.168.0.33
Run Code Online (Sandbox Code Playgroud)
我对网络概念或CIDR不太熟悉,如何确定pod CIDR的适当值?
我之前使用10.244.0.0/16
但导致:
Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "78cf556b2e87e15cc5ec8827ca3a397c16dcfb90f045e225a17028f072db6e5f" network for pod "coredns-78fcdf6894-c7kq2": NetworkPlugin cni failed to set up pod "coredns-78fcdf6894-c7kq2_kube-system" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.1.1/24
Run Code Online (Sandbox Code Playgroud) cidr ×10
amazon-vpc ×3
python ×3
subnet ×3
bitmask ×1
c# ×1
ip-address ×1
ipv6 ×1
kubeadm ×1
kubernetes ×1
php ×1
sql ×1