Php 将IP范围和CIDR转换为十进制地址
我有一个包含多种格式的多个IP地址的文件 以下是这些文件的一个示例:Php 将IP范围和CIDR转换为十进制地址,php,python,bash,perl,command-line,Php,Python,Bash,Perl,Command Line,我有一个包含多种格式的多个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.23
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十进制范围。例如,上面列出的三种格式示例如下所示:
10724054581072405458
1044973568,1044974079
86497280,86499327
该文件中有大约400000行
我可以通过命令行、Perl、Python或PHP来完成这项工作。Python将在模块的帮助下为您完成这项工作
使用您的问题中的三个示例输入和三个预期输出,上面的工作与预期一样 @Borodin这是一个Python模块。OP使用了标签汤(php、python、bash和perl)。@JamesSandzalone:你有一张否决票和三张结束票。问题是你的问题很有标题,你似乎想象我们在看白天的电视,希望这里会出现一个问题来缓解我们的单调。这不是它的工作原理。堆栈溢出是一个地方,在这里,尽管付出了所有的努力,但代码仍然无法工作的程序员可以与同龄人分享代码,以期获得一些见解。您甚至没有代码可供共享,更不用说尽最大努力修复它了。如果你了解Perl、Python和PHP,那么你就很有经验,应该能够想出一些办法。@JamesSandzalone:请阅读并吸收@joeb:堆栈溢出背后的概念是,它应该成为一种维基百科,为编程问题提供有用的答案。这就是为什么结束一个问题的标准如此严格的原因,如果你的问题以前被回答过,这是结束问题的直接原因。考虑到这一愿景,像“我不知道如何编程,但我需要满足此规范”这样的问题对于网站的价值来说几乎是无用的。你知道有人希望事情不是这样,但这并不意味着这是不真实的。理想情况下,每一个问题都应该是新的,并且对许多其他人都有帮助。@joeb:“不要把关人们寻求帮助的能力”订户获得的声誉越高,我们获得的特权就越多。而这些特权仅仅是为了让我们能够准确地把关问题和答案,并减轻主持人的负担。有一个连续的审查项目队列,我可以选择接受、编辑或拒绝其中任何一项。如果你懒散的朋友想做点什么,那么排队的人现在有1041个项目,花在减少这些项目上的时间是值得的。例如,只有代码的答案不被认为是最好的答案;此外,您不会显示任何示例输入或输出来显示测试的范围:代码生成的内容和预期的内容。大多数人认为这是一个非常具体的问题的答案,除了OP之外,对任何人都没有多大用处。除了作为显示实际输入和输出的糟糕借口之外,你的小编辑对解释你写了什么以及为什么没有任何作用。
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))
)