0

假设我有一个文本文件包含一堆这样的 cidr ip 范围:

x.x.x.x/24
x.x.x.x/24
x.x.x.x/23
x.x.x.x/23
x.x.x.x/22
x.x.x.x/22
x.x.x.x/21

然后继续……

如何将这些 cidr 符号转换为 Python 中新文本文件中所有可能的 ip 列表?

4

3 回答 3

1

您可以为此使用 netaddr。下面的代码将在您的磁盘上创建一个文件,并用请求块中的每个 IP 地址填充它:

from netaddr import *

f = open("everyip.txt", "w")
ip = IPNetwork('10.0.0.0/8')

for addr in ip:
    f.write(str(addr) + '\n')

f.close()
于 2016-09-23T22:21:05.767 回答
0

如果您不需要从头开始编写脚本的满足感,您可以使用 python cidrize 包。

于 2014-04-30T17:37:36.540 回答
0

基于如何从 Python 中的 IP 范围列表中生成所有可能的 IP?

import struct, socket
def ips(start, end):
    start = struct.unpack('>I', socket.inet_aton(start))[0]
    end = struct.unpack('>I', socket.inet_aton(end))[0]
    return [socket.inet_ntoa(struct.pack('>I', i)) for i in range(start, end)]

# ip/CIDR
ip = '012.123.234.34'
CIDR = 10
i = struct.unpack('>I', socket.inet_aton(ip))[0] # number
# 175893026
start = (i >> CIDR) << CIDR # shift right end left to make 0 bits
end = i | ((1 << CIDR) - 1) # or with 11111 to make highest number
start = socket.inet_ntoa(struct.pack('>I', start)) # real ip address
end = socket.inet_ntoa(struct.pack('>I', end))
ips(start, end) 
于 2013-07-14T17:36:37.030 回答