我在将IP地址范围转换为CIDR块列表时遇到了一些逻辑问题.我相信这个网站做得很好:http://ip2cidr.com/
我想传入一个起始IP地址和一个结束IP地址,并让java吐出所需的最小CIDR块列表,仅覆盖传入的范围,仅此而已.
例如,如果我传入1.1.1.111的起始地址和1.1.1.120的结束地址,我希望得到回报:1.1.1.111/32 1.1.1.112/29 1.1.1.120/32
(使用/ 32表示单个地址.)
如何将IP地址列表转换为CIDR列表? Google的ipaddr-py库有一个名为summarize_address_range(first,last)的方法,它将两个IP地址(开始和结束)转换为CIDR列表.但是,它无法处理IP地址列表.
Example:
>>> list_of_ips = ['10.0.0.0', '10.0.0.1', '10.0.0.2', '10.0.0.3', '10.0.0.5']
>>> convert_to_cidr(list_of_ips)
['10.0.0.0/30','10.0.0.5/32']
Run Code Online (Sandbox Code Playgroud) 我可以使用来自各种在线资源的代码片段来使用IPv4.我想知道是否有办法用IPv6做到这一点.
基本上我只需要一个表格,我可以输入一个IPv6地址和前缀(例如:地址/ 68),它可以计算网络地址,第一个可用地址,最后一个可用地址和广播地址.然后只需打印到屏幕.不希望将其存储在数据库或任何其他内容中.
我该怎么做呢?
感谢大家提前!
我有以下存储在TXT文件中的IP列表(CIDR格式):<
58.200.0.0/13
202.115.0.0/16
121.48.0.0/15
219.224.128.0/18
...
Run Code Online (Sandbox Code Playgroud)
但我不知道如何确定我的IP是否属于此列表.我在Windows平台上使用Qt C++框架.
我在以下布局中存储的网络中有大量子网列表.它用作主表来存储资产,这些资产将用于定期通过Python脚本自动探测状态.
CREATE TEMP TABLE tmp_networks (
network cidr PRIMARY KEY
);
Run Code Online (Sandbox Code Playgroud)
让我们假设它为了演示而填充了这些值:
当我运行脚本时,Python脚本将执行以下查询以删除任何重叠:
SELECT network
FROM tmp_networks
WHERE NOT EXISTS (
SELECT network
FROM tmp_networks n
WHERE n.network >> tmp_networks.network
);
Run Code Online (Sandbox Code Playgroud)
除了一个小问题外,这很有效.我还有一份应该从工作中排除的个人地址列表.这也是数据库中的一个表:
CREATE TEMP TABLE tmp_except (
address inet PRIMARY KEY
);
Run Code Online (Sandbox Code Playgroud)
让我们假设它包含以下地址:
现在,我找不到从数据库输出中删除这些特定地址的好方法.在我的想法中,解决方案将是这样的:
我试图调查在纯PostgreSQL中是否可以做这样的事情,但是没有找到解决这个问题的方法.关于如何解决这个问题的任何指示?
如何在Python中将CIDR前缀转换为点分四网络掩码?
例如,如果前缀是12我需要返回255.240.0.0.
我们正在使用GeoLite2数据库来实现IP - >国家/地区查找.出于性能原因,我们要导入CSV并将其转换为我们自己的格式.
CSV表示如下:
5.39.40.96/27,3017382,3017382,,0,0
5.39.40.128/28,3017382,3017382,,0,0
5.39.40.144/28,2635167,3017382,,0,0
5.39.40.160/27,3017382,3017382,,0,0
5.39.40.192/26,3017382,3017382,,0,0
5.39.41.0/25,3017382,3017382,,0,0
5.39.41.128/26,3017382,3017382,,0,0
5.39.41.192/26,2635167,3017382,,0,0
5.39.42.0/24,3017382,3017382,,0,0
5.39.43.0/25,3017382,3017382,,0,0
Run Code Online (Sandbox Code Playgroud)
所以我们需要将CIDR表示法(例如5.39.40.96/27 :)转换为IP地址范围.(从IP到IP)
如何在C#中完成?
注意:这不是这个问题的重复,因为我问的是C#实现而不是Java.
我有一个我创建的python字典,这个字典包含以下格式的子网列表:
x.x.x.x/24
y.y.y,y/25
z.z.z.z/26
a.a.a.a/27
Run Code Online (Sandbox Code Playgroud)
等等...
我想取这本字典中的项目,解析它,然后按以下格式吐出结果:
x.x.x.x 255.255.255.0
y.y.y.y 255.255.255.128
x.x.x.x 255.255.255.192
a.a.a.a 255.255.255.224
Run Code Online (Sandbox Code Playgroud)
我现在对此并不多,因为我在网上找不到很多关于这个主题的内容,而不是任何可以快速简洁的方式.思考?
如何检测两个Golang net.IPNet对象之间是否存在交集?
也就是说,如何检查双方如果第一个网络是第二个子网或如果第二网络是第一个子网.
Go是否为此特定任务提供了任何实用功能?
请参阅下面的测试代码
package main
import (
"fmt"
"net"
)
func main() {
_, net1, _ := net.ParseCIDR("1.1.1.1/24")
_, net2, _ := net.ParseCIDR("1.1.0.2/16")
_, net3, _ := net.ParseCIDR("1.1.1.3/25")
_, net4, _ := net.ParseCIDR("1.2.0.4/16")
test(net1, net2, true)
test(net2, net1, true)
test(net1, net3, true)
test(net3, net1, true)
test(net1, net4, false)
test(net4, net1, false)
}
func test(n1, n2 *net.IPNet, expect bool) {
result := intersect(n1, n2)
var label string
if result == expect {
label = …Run Code Online (Sandbox Code Playgroud) 有人可以确切解释一下CIDR块的工作原理,以及如何将其转换为0.0.0.0/32吗?请使用外行术语或什至是与网络无关的类比。似乎找不到找到我的解释。谢谢!!