最近,我找到了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
>>>
是谁能帮我解决这个问题?
或者我可以使用其他图书馆?
感谢。
答案 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
,因为它们实际上是不可变的。