Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.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
Python 如何计算两个Ip地址之间有多少Ip地址?_Python_Ip_Ip Address - Fatal编程技术网

Python 如何计算两个Ip地址之间有多少Ip地址?

Python 如何计算两个Ip地址之间有多少Ip地址?,python,ip,ip-address,Python,Ip,Ip Address,我有两个Ip地址,我想计算在这两个地址之间有多少个Ip地址 例如: IP_START = "127.0.0.0" IP_END = "127.0.1.1" SUM_OF_IP_ADDRESS = 257 有人知道python是否有什么可以帮我完成这项任务吗?这听起来很有趣,所以你来吧 IP_START = "127.0.0.0" IP_END = "127.0.1.1" diffs = [int(b)-int(a) for a,b in zip(IP_START.split('.'), I

我有两个Ip地址,我想计算在这两个地址之间有多少个Ip地址

例如:

IP_START = "127.0.0.0"

IP_END = "127.0.1.1"

SUM_OF_IP_ADDRESS = 257

有人知道python是否有什么可以帮我完成这项任务吗?

这听起来很有趣,所以你来吧

IP_START = "127.0.0.0"
IP_END = "127.0.1.1"
diffs = [int(b)-int(a) for a,b in zip(IP_START.split('.'), IP_END.split('.'))]
SUM_OF_IP_ADDRESS = 0
for d in diffs:
    SUM_OF_IP_ADDRESS *= 256
    SUM_OF_IP_ADDRESS += d
SUM_OF_IP_ADDRESS += 1

>>> IP_START = "127.0.0.0"
>>> IP_END = "127.0.1.1"
>>> diffs = [int(b)-int(a) for a,b in zip(IP_START.split('.'), IP_END.split('.'))]
>>> SUM_OF_IP_ADDRESS = 0
>>> for d in diffs:
...     SUM_OF_IP_ADDRESS *= 256
...     SUM_OF_IP_ADDRESS += d
... SUM_OF_IP_ADDRESS += 1
...
>>> SUM_OF_IP_ADDRESS
257
class IPV4ADDR:
    def __init__(self, *parts):
        if len(parts) > 4:
            raise Exception("Unknown IP Address:%s" % parts)
        if len(parts) == 1 and isinstance(parts[0], basestring):
            parts = map(int, parts[0].split("."))
        if len(parts) != 4:
            raise Exception("Unknown IP Address:%s" % parts)
        self.parts = parts

    def __int__(self):
        parts = self.parts
        return parts[0] << 24 | parts[1] << 16 | parts[2] << 8 | parts[3]

    def __sub__(self, other):
        return int(self) - int(other)

    def __add__(self, other):
        #not sure how to "add" ip addresses so ill just OR them
        numeric_val = int(self) | int(other) 
        return IPV4ADDR(numeric_val & 0xFF000000,
                      numeric_val & 0xFF0000,
                      numeric_val & 0xFF00,
                      numeric_val & 0xFF)

    def __str__(self):
        return "%d.%d.%d.%d" % self.parts

a1 = IPV4ADDR("127.0.0.0")
a2 = IPV4ADDR("127.0.1.1")

print a2 - a1 #257
IPV4ADDR类:
定义初始化(自身,*部分):
如果透镜(零件)>4:
引发异常(“未知IP地址:%s”%parts)
如果len(parts)=1且isinstance(parts[0],基串):
零件=映射(整数,零件[0]。拆分(“.”)
如果len(部件)!=4:
引发异常(“未知IP地址:%s”%parts)
self.parts=零件
定义内部(自我):
零件=自身零件

使用
ipaddress
软件包返回零件[0]简短解决方案

import ipaddress
ip1 = int(ipaddress.IPv4Address(unicode('127.0.0.0')))
ip2 = int(ipaddress.IPv4Address(unicode('127.0.1.1')))
print ip2 - ip1
一些简短的解决方案

from ipaddress import ip_address

def ips_between(IP_START, IP_END):
    return int(ip_address(IP_END)) - int(ip_address(IP_START))

这不好。示例:IP_START=“127.0.0.1”IP_END=“127.0.0.10”IP_地址之和=10,您的答案是:9当我问在这两者之间有多少IP地址时,我是指它们。它给出了正确的答案。。。它与上面的输出匹配。。。这两者之间只有9个。。。你不能重新定义数字系统,因为它不好。示例:IP_START=“127.0.0.1”IP_END=“127.0.0.10”IP_地址之和=10,你的回答是:9当我问在这两者之间有多少IP地址时,我是指它们。你自相矛盾。在答案上加一个,这不好。示例:IP_START=“127.0.0.1”IP_END=“127.0.0.10”IP_地址之和=10,您的回答是:9当我问在这两者之间有多少IP地址时,我的意思是它们。@MultiPython:在这种情况下,您的示例也错了(它显示257,而它应该显示258)。我已更新以添加您的功能请求