我有一个IP地址列表,其中包含一个通配符(即"*"
)。一个示例为10.20.*.*
或10.*.*.*
或192.168.20.*
如何将IP地址转换为正确的IP地址?
例如,10.20.*.*
将是10.20.0.0
,10.20.0.1
,10.20.0.2...10.20.255.255
(成千上万个IP地址)。我正在尝试将允许通配符的系统转换为需要单个IP地址的系统。
我尝试使用RegEx在文本文件中使用搜索和替换,但未按预期工作
答案 0 :(得分:0)
尝试一下:
import itertools
ip = "10.0.*.*"
output = [[int(x)] if x != '*' else [i for i in range(256)] for x in ip.split(".")]
print(list(itertools.product(*output)))
# >> [(10, 0, 0, 0), (10, 0, 0, 1), (10, 0, 0, 2), ..., (10, 0, 255, 254), (10, 0, 255, 255)]
更多内容:list comprehensions和itertools库
答案 1 :(得分:0)
您可以使用ipaddress
库。
def ip_range(wildcard):
mask = 32 - wildcard.count('*') * 8
network = ipaddress.ip_network('{}/{}'.format(wildcard.replace('*', '0'), mask))
return network.hosts()
此函数将返回ipaddress.IPv4Address
个对象的生成器。
用法:
>>> ip_range('10.0.0.*')
<generator object _BaseNetwork.hosts at 0x105ece7c8>
>>> list(map(str, _))
['10.0.0.1',
'10.0.0.2',
'10.0.0.3',
...
'10.0.0.253',
'10.0.0.254']