我的文件包含多种格式的多个IP地址。
以下是文件示例:
31.14.133.39
37.221.172.0/23
46.19.137.0/24
46.19.143.0/24
50.7.78.88/31
5.79.39.4,5.79.39.5
62.73.8.0/23
63.235.155.210
5.39.216.0,5.39.223.255
64.12.118.23
64.12.118.88
有些是CIDR格式,有些是范围,有些是单独的IP。
以下是3种不同的格式:
63.235.155.210
62.73.8.0/23
5.39.216.0,5.39.223.255
我想将所有行转换为IP小数范围。例如,上面列出的三格式样本如下所示:
1072405458,1072405458
1044973568,1044974079
86497280,86499327
该文件中有大约400,000行。
我可以通过命令行,Perl,Python或PHP来完成它。
答案 0 :(得分:-1)
Python将在netaddr
模块的帮助下为您完成此任务。
from netaddr import IPAddress, IPNetwork
with open("your file.txt", "r") as f:
for line in f:
if "/" in line:
ip_network = IPNetwork(line)
print "{},{}".format(
ip_network.first,
ip_network.last
)
continue
if "," in line:
first_ip, last_ip = line.split(",")
else:
first_ip = last_ip = line
print "{},{}".format(
int(IPAddress(first_ip)),
int(IPAddress(last_ip))
)
使用问题的三个示例输入和三个预期输出,上面的工作正常。