从python中的文本输出扩展的ip列表

时间:2014-03-10 14:20:49

标签: python regex

我的文字包含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 个答案:

答案 0 :(得分:3)

您可以使用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

价: