python - 如何从文件中的 CIDR 生成所有 IP?
问题描述
我有一个包含 CIDR 的文件,如下所示:
1.2.3.4/10
5.6.7.8/20
...
我想读取 CIDR 文件,然后将所有 IP 写入另一个文件。
已经尝试过这个 python 代码,但不知道如何读取每一行,然后执行以下操作:
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()
编辑
我也已经尝试过了:
from netaddr import *
f = open("everyip.txt", "w")
with open("cidrs.txt") as f:
content = f.readlines()
content = [x.strip() for x in content]
str1 = ''.join(content)
ip = IPNetwork(str1)
for addr in ip:
f.write(str(addr) + '\n')
f.close()
这仅适用于cidrs.txt
. 如果 1 行以上cidrs.txt
,则会引发错误并且不起作用。
编辑2:
我试过这个但得到一个错误:
from netaddr import *
i = 0
f = open("everyip.txt", "w")
with open("range.txt") as f1:
content = f1.readlines()
content = [x.strip() for x in content]
while (i < len(content)):
ip = IPNetwork(content[i])
for addr in ip:
f.write(str(addr) + '\n')
f.close()
错误:
f.write(str(addr) + '\n')
ValueError: I/O operation on closed file.
解决方案
OP将此作为对他们问题的编辑发布。
固定的:
from netaddr import *
with open("range.txt") as f1:
content = f1.readlines()
content = [x.strip() for x in content]
with open("everyip.txt", "w") as f:
for i in content:
ip = IPNetwork(i)
for addr in ip:
f.write(str(addr) + '\n')
如果有大量行,最好一次处理一条,而不是全部读入内存。
from netaddr import *
with open("range.txt") as f1, open("everyip.txt", "w") as f:
for line in f1:
cidr = line.rstrip('\n')
ip = IPNetwork(cidr)
for addr in ip:
f.write(str(addr) + '\n')
推荐阅读
- firebase - 如何按 Firestore 中的项目数分页或无限滚动?
- c# - 运行带有 powershell 的批处理文件并失败
- android - React Native 中的 CSV 预览
- node.js - 包含混合内容的数组不起作用。反应
- python - 将 2 个列表与 .intersection() 进行比较
- centos7 - centos firewall-cmd 端口转发到目标端口范围不起作用
- nattable - Nattable 按钮单击排序,放置在列标题上
- python - 如何读取 csv 行并使用 pandas 转换为数据框列?
- javascript - 无法读取未定义的属性“myHub”(SignalR)
- c# - 避免对特定表行进行 sql 连接