Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将IP范围和CIDR转换为十进制地址_Php_Python_Bash_Perl_Command Line - Fatal编程技术网

Php 将IP范围和CIDR转换为十进制地址

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

我有一个包含多种格式的多个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十进制范围。例如,上面列出的三种格式示例如下所示:

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))
        )