问题描述
我有包含IP和子网数据的文本。 我需要输出给定范围内的每个IP。 输入看起来像这样:
10.14.21.23 0.0.0.0
20.54.0.0 0.0.127.255
30.76.21.0 0.0.0.255
40.24.21.135 0.0.0.0
输出需要如下所示:
10.14.21.23
20.54.0.1
20.54.0.2
20.54.0.3
20.54.0.4
...
20.54.127.254
30.76.21.1
30.76.21.2
30.76.21.3
30.76.21.4
...
30.76.21.254
40.24.21.135
我用以下方法隔离了IP:
for line in file.readlines():
if re.findall(r'\d+\.\d+\.\d+\.\d+?', line):
tuples = re.findall(r'\d+\.\d+\.\d+\.\d+', line)
这将IP和子网放入元组[0]和元组[1]。 这是处理这些数据的最佳方法吗? 如何计算给定范围内的每个IP?
提前致谢。
1楼
你可以使用ipcalc:
#!/usr/bin/python
import ipcalc
import sys
for data in sys.argv[1:]:
with open(data) as data:
for data in data:
data = data.split()
# Convert subnet mask to count
data[1] = ipcalc.IP(data[1]).bin().count('0')
data = ipcalc.Network(*data)
data = list(data)
if len(data) == 1:
print data[0]
else:
for data in data[1:-1]:
print data
参考: