如何将新数据添加到iptools IpRangeList中

时间:2014-05-15 01:23:37

标签: python list ip range

最近,我找到了python库" iptools"可以帮我解决一些问题, 但我遇到了iptools.IpRangeList中的问题, 我只能先声明初始数据,如

internalIP = iptools.IpRangeList(
'127.0.0.1/8',                
'192.168/16',               
'10.0.0.1/8'  

如果我想在IpRangeList中添加新的ip,编译器总是显示错误

internalIP.append('1.1.1.1')
AttributeError: 'IpRangeList' object has no attribute 'append'

或openfrom file

intranetlist = IpRangeList()
if os.path.isfile("/tmp/intranal.list"):
    fp = open("/tmp/intranal.list", 'r')
    intranetlist = ([line.strip() for line in fp])        
    print intranetlist , len(intranetlist)
    fp.close()
    return

结果: [' 127.0.0.1/8' ;,' 192.168 / 16',' 10.0.0.0/8'] 3

不正确,正确的结果如下

>>> from iptools import *
>>> a=IpRangeList('127.0.0.1/8' , '192.168/16', '10.0.0.0/8')
>>> print a
(('127.0.0.0', '127.255.255.255'), ('192.168.0.0', '192.168.255.255'), ('10.0.0.0', '10.255.255.255'))
>>> len(a)
33619968
>>> 
是谁能帮我解决这个问题? 或者我可以使用其他图书馆?

感谢。

1 个答案:

答案 0 :(得分:0)

您收到AttributeError,因为IpRangeList对象未定义append方法。另外,在内部defines the IP listing as a tuple,您无法附加。

然而,您可以创建所需IP范围的完整列表,然后从using *args syntax创建IpRangeList以将列表解压缩到函数调用中,如下所示:

intranetlist = None
if os.path.isfile("/tmp/internal.list"):
    fp = open("/tmp/internal.list", 'r')
    intranetlist = IpRangeList(*[line.strip() for line in fp])
    print intranetlist , len(intranetlist)
    fp.close()
return intranetlist

至于附加到现有的IpRangeList,如果不更改它就无法实现,在您创建IpRangeList后,您也可以轻松访问IP列表。所以我建议创建一个基本的Python列表并在最后一刻创建IpRangeList,因为它们实际上是不可变的。