有没有什么工具能把一大堆 ip 自动合并成 CIDR /24 /16 的格式?

2020-04-04 11:33:47 +08:00
 MiaRunis
RT

比如收集到几千个 ip,但路由并不需要精确到每一个,只需要 xxx.xxx.xxx.0-255 这样 /24 精度即可。

有没有什么现成工具能合并生成 CIDR 列表?
2520 次点击
所在节点    问与答
14 条回复
hiplon
2020-04-04 11:35:14 +08:00
排个序找到最大最小就很好算了
ihciah
2020-04-04 11:43:06 +08:00
先转成 /24,再用开源工具合并?
gstqc
2020-04-04 11:58:20 +08:00
把最后一位替换成 0/24,然后去重
Livid
2020-04-04 12:15:07 +08:00
变成十进制,然后减去 % 256 的结果放进一个 set,最后 set 里的数字转回 IP 就是所有的 /24
samuel
2020-04-04 12:37:16 +08:00
#! python3
import struct
import socket
import sys

cidr = set()
mask = int('0xFFFFFF00', 16)

for line in sys.stdin:
b = struct.unpack('!I', socket.inet_aton(line))[0]
cidr.add(b & mask)

for c in cidr:
print(socket.inet_ntoa(struct.pack("!I", c)) + '/24')
V69EX
2020-04-04 12:50:08 +08:00
@samuel 楼主提 CIDR 的意思,我觉得应该是可变长的掩码,不是固定的 /24,固定长度的掩码,就没必要提 CIDR 了……
ladeo
2020-04-04 12:50:10 +08:00
excel 就可以了吧
xiadong1994
2020-04-04 12:53:46 +08:00
最长公共前缀子串
also24
2020-04-04 12:58:00 +08:00
@V69EX #6
楼主在帖子里不是说只需要 /24 即可嘛?
Akkuman
2020-04-04 13:46:59 +08:00
@Livid 好方法
webshe11
2020-04-04 14:02:44 +08:00
看着跟 CCF 认证 201812-3 题 CIDR 合并 一样
http://118.190.20.162/view.page?gpid=T82
RickyHao
2020-04-04 14:23:58 +08:00
import netaddr
cidr_list = netaddr.cidr_merge(ip_list)
Laynooor
2020-04-04 14:34:17 +08:00
apt install aggregate
yum install aggregate
matrix67
2022-02-18 09:55:06 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/659283

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX